3222 - 公约数
时间限制 : 2 秒
内存限制 : 128 MB
给出一个数N,求1<=x,y<=N,且gcd(x,y)为素数的数对x,y 的数量
题目输入
一行一个数N
题目输出
一个数表示答案
输入/输出样例
输入格式
4
输出格式
4
C++解答
#include<cstdio> #define LL long long const int maxn=10000001; LL n,ans,s[maxn]; bool b[maxn]={0}; int main() { scanf("%lld",&n); for(int i=1;i<=n;i++) s[i]=i; for(int i=2;i<=n;i++) { s[i]+=s[i-1]; if(!b[i]) { s[i]--; for(int j=i<<1;j<=n;j+=i) s[j]=(s[j]/i)*(i-1),b[j]=1; } } for(int i=2;i<=n;i++) if(!b[i]) ans+=(s[n/i]<<1)-1; printf("%lld",ans); }