UVa 10820 Send a Table (Farey数列&欧拉函数求和)
来源:互联网 发布:网络验证系统免费 编辑:程序博客网 时间:2024/06/08 20:01
这里先说一下欧拉函数的求法
先说一下筛选素数的方法
void Get_Prime(){ /*筛选素数法*/ for(int i = 0; i < N; i++) vis[i] = 1; vis[0] = vis[1] = 0; for(int i = 2; i * i < N; i++) if(vis[i]){ for(int j = i * i; j < N; j += i) vis[j] = 0; }}
先说一种筛选求法
void Get_gcd(){ for(int i = 1; i < N ; i++) GCD[i] = i; for(int i = 0; i < N; i++){ if(vis[i]) for(int j = i; j < N ; j +=i) GCD[j] = GCD[j] / i * (i - 1); }}
另外欧拉函数有几个性质
如果 m,n互质(最大公约数为1)
则f(n*m) = f(n) * f(m)
如果 n 为 p 的 k 次幂
则f(n) = (p-1)*p^(k-1)
还有一个通用的公式
I I Φ(n) = ∏ piki -1(pi -1) = n ∏ (1 - 1 / pi) i=1 i=1举个例子
φ(72)=φ(2^3×3^2)=(2-1)2^(3-1)×(3-1)3^(2-1)=24
所有还有一个算法
int eular(int n){ int ret=1,i; for(i=2;i*i<=n;i++) if(n%i==0) { n/=i,ret*=i-1; while(n%i==0) n/=i,ret*=i; } if(n>1) ret*=n-1; return ret;}
下面是该题AC代码 0.016s
#include<cstdio>#include<cstring>using namespace std;#define N 50000 + 100#define MAX_SIZE 1000int vis[N + 50] = {0};int GCD[N + 50];int SUM[N + 10];int n,cnt = 0;void Get_Prime(){ /*筛选素数法*/ for(int i = 0; i < N; i++) vis[i] = 1; vis[0] = vis[1] = 0; for(int i = 2; i * i < N; i++) if(vis[i]){ for(int j = i * i; j < N; j += i) vis[j] = 0; }}void Get_gcd(){ for(int i = 1; i < N ; i++) GCD[i] = i; for(int i = 0; i < N; i++){ if(vis[i]) for(int j = i; j < N ; j +=i) GCD[j] = GCD[j] / i * (i - 1); }}void Elect_gcd(){ SUM[2] = GCD[2]; for(int i = 3 ; i < N ; i++) SUM[i] = SUM[i - 1] + GCD[i];}int eular(int n){ int ret=1,i; for(i=2;i*i<=n;i++) if(n%i==0) { n/=i,ret*=i-1; while(n%i==0) n/=i,ret*=i; } if(n>1) ret*=n-1; return ret;}int main(){ Get_Prime(); Get_gcd(); Elect_gcd(); while(scanf("%d",&n) && n){ if(n == 1) printf("1\n"); /*特殊情况讨论*/ else printf("%d\n",2 * SUM[n] + 1); } return 0;}
0 0
- UVa 10820 Send a Table (Farey数列&欧拉函数求和)
- UVa 10820 Send a Table (Farey数列&欧拉函数求和)
- UVa 10820 - Send a Table (Farey数列&&欧拉函数)
- Send a Table 欧拉函数UVA
- uva-10820-Send a Table 欧拉函数,筛法求欧拉函数
- POJ 2478 Farey Sequence(Farey数列&欧拉函数求和)
- UVA 10820 - Send a Table 数论 (欧拉函数)
- uva 10820 - Send a Table(欧拉函数)
- UVa 10820 Send a Table(欧拉函数)
- UVa 10820 - Send a Table 欧拉函数模板
- UVA - 10820 Send a Table 欧拉函数
- Send a Table - UVa 10820 欧拉函数
- uva 10820 Send a Table 欧拉函数
- UVa 10820 - Send a Table(欧拉函数)
- UVA - 10820 - Send a Table (欧拉函数)
- UVa 10820 - Send a Table(欧拉函数)
- [UVA 10820]Send a Table[欧拉函数][nloglog(n)]
- UVA 10820 Send a Table(欧拉函数)
- 加密解密的相关词
- 使用VS从DLL中产生LIB文件
- Android Asynchronous Http Client
- virtualbox安装centos 6.3后无法上网解决办法
- 【Python】self, __init__(未完)
- UVa 10820 Send a Table (Farey数列&欧拉函数求和)
- install wired adapter for centos
- 高效缓存Memcached 集成使用说明
- 为你的应用程序添加启动画面
- C++静态库和动态库
- 返回键点击事件
- k近邻法的实现:kd树
- 用boost分割字符串的代码示例
- 筛选法求素数