zoukankan      html  css  js  c++  java
  • UVa 10179

    题目:计算一个给定数的欧拉函数(1~n-1中和n互质的数的个数)。

    分析:数论,素数筛法,欧拉函数。

                欧拉函数:φ(n)= n *(1 - 1/p1)*(1 - 1/p2)*(1 - 1/p3)*…*(1 - 1/pt)。

                这里利用筛法打表计算出50000内的素数,由于数据范围是1000000000内的,

                所以。不能被前50000内的素数整除的数,也一定是素数,而且每一个数n中最多有一个;

                计算输出就可以。

    说明:最终450题了(⊙_⊙)。

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int fac[30];
    int prim[50000];
    int used[50000];
    
    int main()
    {
    	for (int i = 0 ; i < 50000 ; ++ i)
    		used[i] = 0;
    	int save = 0;
    	for (int i = 2 ; i < 50000 ; ++ i)
    		if (!used[i]) {
    			prim[save ++] = i;
    			for (int j = 2*i ; j < 50000 ; j += i)
    				used[j] = 1;
    		}
    	
    	int n;
    	while (cin >> n && n) {
    		int count = 0,base = 0,m = n;
    		while (n > 1 && base < save) {
    			if (n%prim[base] == 0) {
    				fac[count ++] = prim[base];
    				while (n%prim[base] == 0)
    					n /= prim[base];
    			}
    			base ++;
    		}
    		if (n > 1) fac[count ++] = n;
    		
    		long long ans = m;
    		for (int i = 0 ; i < count ; ++ i)
    			ans = ans/fac[i]*(fac[i]-1);
    		
    		cout << ans << endl;
    	}
    	return 0;
    }
    


                

  • 相关阅读:
    使用contentProvider
    创建Sqlite数据库(一)
    AIDL实现进程间通信
    Messenger实现进程间通信(IPC)
    Serializable使用
    Parcelable使用(二)
    STAR法则
    Python系列-------基本语法
    前端随心记---------面试题集
    前端随心记---------惟客科技面试
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6721785.html
Copyright © 2011-2022 走看看