UVA 11426-GCD - Extreme (II)
来源:互联网 发布:淘宝网上买酒是真的吗 编辑:程序博客网 时间:2024/04/30 12:15
题目链接
题目解析
题意
输入正整数n,求满足的数对(i,j)所对应的gcd(i,j)之和。输入0时程序结束。
思路
所有gcd(x,n)的值都是n的约数,用g(n,i)表示满足gcd(x,n)=i且x<n的正整数x的个数,则f(n)=sum{i×g(n,i)|i是n的约数}。gcd(x,n)=i的充要条件是gcd(x/i,n/i)=1。满足条件的x/i有phi(n/i)个,说明g(n,i)=phi(n/i)。
计算f(n)若对每个n枚举它的约数i,速度很慢,逆转思路,对于每个i枚举它的倍数n。
代码
#include<stdio.h>#include<string.h>#define MAXN 4000000#define LL long longLL s[MAXN+1],f[MAXN+1];int phi[MAXN];void phi_table(int n){ for(int i=2;i<=n;i++) phi[i]=0; phi[1]=1; for(int i=2;i<=n;i++){ if(!phi[i]){ for(int j=i;j<=n;j+=i){ if(!phi[j]) phi[j]=j; phi[j]=phi[j]/i*(i-1); } } }} int main(){ phi_table(MAXN); memset(f,0,sizeof(f)); for(int i=1;i<=MAXN;i++) for(int n=i*2;n<=MAXN;n+=i) f[n]+=i*phi[n/i]; s[2]=f[2]; for(int n=3;n<=MAXN;n++) s[n]=s[n-1]+f[n]; int n; while(scanf("%d",&n)!=EOF,n) printf("%lld\n",s[n]); return 0;}
0 0
- UVA 11426 - GCD - Extreme (II)
- UVA 11426 GCD - Extreme (II)
- uva 11426 GCD Extreme (II)
- UVA - 11426 GCD - Extreme (II)
- UVA:11426 GCD - Extreme (II)
- UVA 11426 GCD - Extreme (II)
- UVA 11426-GCD - Extreme (II)
- UVA 11426GCD - Extreme (II)
- UVA 11426 GCD - Extreme (II)
- UVA 11426 - GCD Extreme(II)
- UVA 11426 GCD Extreme (II)
- UVA 11426 - GCD - Extreme (II) (数论)
- UVA 11426 - GCD - Extreme (II) (数论)
- uva 11426 - GCD - Extreme (II)(数论)
- 【欧拉】 UVA 11426 GCD - Extreme (II)
- 欧拉 uva 11426 - GCD - Extreme (II)
- uva 11426 GCD - Extreme (II) (神奇的GCD)
- UVA 11426 - GCD - Extreme (II) GCD性质例题
- 浅析jQuery整体框架与实现(下)
- MyBatis+Spring 事务管理(未测试)
- LeetCode上Tag为动态规划(Dynamic Programming)的题目整理
- LeetCode 347. Top K Frequent Elements
- 算法---栈(java实现)
- UVA 11426-GCD - Extreme (II)
- Trie树
- presentViewController:navigationController animated:YES completion:^(void)
- springmvc+mybatis+ajax 批量插入数据(未测试)
- nosql 一些了解
- 欢迎使用CSDN-markdown编辑器
- Java加密解密DESUtil、TripleDESUtil(未测试)
- LeetCode 144. Binary Tree Preorder Traversal
- c语言枚举类型