• zoj 2674 Strange Limit (E) 欧拉定理应用


    1 a,m和不一定互素的时候,欧拉定理的应用  a^phi(m)%m=a^(k*phi(m) ) %m    (证明用到中国剩余定理)

    2 发现A 满足的同余式以后 ,由于phi(m)<m  ,可以设计一个递归函数搞定之

    #include<iostream>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    
    struct robber
    {
      int money;
      int id;
      double inf;
    };
    
    int cmp(robber x,robber y)
    {
       if(x.inf<y.inf)  return 1;
       else return 0;
    }
    int main()
    {
      int size;
      cin>>size;
      for(int l=0;l<size;l++)
      {
    
        int n,m,y;
        cin>>n>>m>>y;
        int *p=new int [n];
        for(int i=0;i<n;i++)
         cin>>p[i];
    
    
         int q[n];
    
         for(int i=0;i<n;i++)
            {
              q[i]=m*p[i]/y;
            }
    
    
         int sum=0;
         for(int i=0;i<n;i++)
            sum+=q[i];
         int left=m-sum;
    
    
       //  存在结构体中去
         robber * rr=new robber[n];
         for(int i=0;i<n;i++)
           {
                rr[i].id=i;
                rr[i].money=q[i];
                rr[i].inf=abs((q[i]+1.0)/m-(p[i]*1.0)/y)-abs((q[i]*1.0)/m-(p[i]*1.0)/y);
           }
    
         sort(rr,rr+n,cmp);
    
         for(int i=0;i<left;i++)
          {
             q[rr[i].id]++;
         }
    
         for(int i=0;i<n-1;i++)
            cout<<q[i]<<" ";
            cout<<q[n-1]<<endl;
    
    
        if(l<size-1)  cout<<endl;
      }
    }
    

    这里求phi(m)的方式还是有点土

    watashi大神的代码如下:


    #include <cstdio>
    
    long long f[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600};
    long long p[] = {2, 3, 5, 7, 11, 13};
    
    long long gcd(long long a, long long b) {
    	return b == 0 ? a : gcd(b, a % b);
    }
    
    long long phi(long long n) {
    	long long m = 1;
    	for (int i = 0; n > 1; ++i) {
    		if (n % p[i] == 0) {
    			m *= p[i] - 1;
    			n /= p[i];
    			while (n % p[i] == 0) {
    				m *= p[i];
    				n /= p[i];
    			}
    		}
    	}
    	return m;
    }
    
    long long powMod(long long a, long long b, long long m) {
    	long long c = 1 % m;
    	while (b > 0) {
    		if ((b & 1) != 0) {
    			c = c * a % m;
    		}
    		a = a * a % m;
    		b >>= 1;
    	}
    	return c;
    }
    
    long long gao(long long a, long long b) {
    	if (b == 1) {
    		return 0;
    	} else {
    		long long d = phi(b);
    		return powMod(a, d + gao(a, d), b);
    	}
    }
    
    int main() {
    	bool blank = false;
    	long long a, b;
    	
    	while (scanf("%lld%lld", &a, &b) != EOF) {
    		if (blank) {
    			puts("");
    		} else {
    			blank = true;
    		}
    		printf("%lld
    ", gao(a, f[b]));
    	}
    
    	return 0;
    }
    
    /*
    Run ID  	Submit Time  	Judge Status  	Problem ID  	Language  	Run Time(ms)  	Run Memory(KB)  	User Name
    2130779 	2010-03-28 22:49:39 	Accepted 	2674 	C++ 	0 	176 	watashi@Zodiac
    */



  • 相关阅读:
    四十五、android camera
    MyEclipse优化技巧
    设置MyEclipse编码、补全快捷键、字体大小
    妈妈走开一会儿
    四十一、Android Notification通知详解
    四十三、设置Activity永不过期,即不执行onDestroy()
    七、oracle 表查询二
    四十七、实现调用Android手机的拍照功能
    四十四、Android之android:layout_weight详解
    一、oracle 高水位线详解
  • 原文地址:https://www.cnblogs.com/814jingqi/p/3217953.html
Copyright © 2020-2023  润新知