[bzoj2818]GCD 欧拉函数线筛
2017-06-01 19:06
423 查看
2818: Gcd
Time Limit: 10 Sec Memory Limit:256 MB
Submit: 5186 Solved: 2327
[Submit][Status][Discuss]
Description
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对.
Input
一个整数NOutput
如题Sample Input
4Sample Output
4HINT
hint对于样例(2,2),(2,4),(3,3),(4,2)
1<=N<=10^7
Source
枚举1到n中每个素数p分别用每个数除p,即求互质对的个数
用欧拉函数*2-1即可
#include<iostream> #include<cstdio> using namespace std; const int N = 10000005; bool isnot ,mark ; int pri ,phi ,tot=0; long long sum ; void init( int n ){ isnot[1] = true; phi[1] = 1; for( int i = 2; i <= n; i++ ){ if( !isnot[i] ){ pri[++tot] = i; phi[i] = i - 1; } for( int t = 1; t <= tot; t++ ){ int j = pri[t]*i; if( j > n ) break; isnot[j] = true; if( i % pri[t] ) phi[j] = phi[i] * phi[pri[t]]; else { phi[j] = pri[t] * phi[i]; break; } } } for( int i = 2; i <= n; i++ ) sum[i] = sum[i-1] + phi[i]; } int n; long long ans=0; int main(){ scanf("%d", &n); init(n); for( int i = 1; i <= n; i++ ) sum[i] = sum[i-1] + phi[i]; for( int i = 1; i <= tot; i++ ) ans += sum[n/pri[i]]*2-1; printf("%lld",ans); return 0; }
相关文章推荐
- bzoj2818: Gcd(欧拉函数)
- BZOJ 2818 GCD(欧拉函数)
- 【BZOJ2818】Gcd(莫比乌斯反演,欧拉函数)
- [bzoj2818]Gcd 欧拉函数
- bzoj 2818 Gcd 【欧拉函数】
- bzoj 2818 gcd 线性欧拉函数
- bzoj 2818 GCD(欧拉函数)
- BZOJ 2818 Gcd (莫比乌斯反演 或 欧拉函数)
- 【bzoj2818】Gcd 欧拉函数
- [BZOJ 2818] Gcd 线性筛+欧拉函数前缀和
- 【BZOJ2818】Gcd (欧拉函数)
- bzoj 2818: Gcd 线性筛求欧拉函数
- BZOJ2818 Gcd(欧拉函数)
- BZOJ 2818: Gcd区间内最大公约数 为素数的对数(欧拉函数的应用)
- BZOJ 2818 Gcd(gcd(x,y)为素数/欧拉函数/莫比乌斯反演)
- BZOJ 2818: Gcd( 欧拉函数 )
- BZOJ2818: Gcd 欧拉函数求前缀和
- bzoj 2818 Gcd(欧拉函数 | 莫比乌斯反演)
- bzoj 2818 Gcd 欧拉函数求和
- Bzoj-2818 Gcd 欧拉函数