zoukankan      html  css  js  c++  java
  • noip2009普及组 细胞*&&vijos1814

    题目的意思抽象出来就是说

    求:使(a[i]^t)%(m1^m2)==0的t的最小值

    数据范围:a[i]<=2*1e9,m1<=3"*1e4,m2<=1e4


    第一次写这种题

    由于数据太大不能直接取余

    用到质因数分解

    上图:


    然后就可以计算了

    上代码:

    #include<cstdio>
    #include<cstring>
    struct node
    {
    	int x,t;
    }e[10010];
    int a[10010];
    int main()
    {
    	int n,m1,m2;
    	scanf("%d %d %d",&n,&m1,&m2);
    	if(m1==1)
    	{
    		printf("0
    ");return 0;
    	}
    	int cnt=0;
    	for(int i=2;m1!=1;i++)
    	if(m1%i==0)
    	{
    		e[++cnt].x=i;
    		while(m1%i==0)
    		{
    			e[cnt].t++;
    			m1/=i;
    		}
    		e[cnt].t*=m2;
    	}
    	int ans=-1,k;
    	for(int i=1;i<=n;i++)	
    	{
    		scanf("%d",&k);
    		bool f=1;int max=0;
    		for(int j=1;j<=cnt&&f;j++)
    		if(k%e[j].x==0)
    		{
    			int t=0;
    			while(k%e[j].x==0)
    			{
    				t++;k/=e[j].x;
    			}
    			if(e[j].t%t==0)	t=e[j].t/t;
    			else t=e[j].t/t+1;
    			max=max>t?max:t;
    		}
    		else 	f=0;
    		if(f&&(ans==-1||max<ans))	ans=max;
    	}
    	printf("%d
    ",ans);
    	return 0;
    }



  • 相关阅读:
    bzoj 1053
    bzoj 1004 组合
    字符串哈希
    bzoj 1015 并查集
    bzoj 1003 最短路+dp
    HDU 4352 数位dp
    bzoj 1879 状压dp
    codeforces 55D 数位dp
    Codeforces 830B
    组合计数 && Stirling数
  • 原文地址:https://www.cnblogs.com/Brian551/p/7353009.html
Copyright © 2011-2022 走看看