3222 - 公约数

通过次数

0

提交次数

0

时间限制 : 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);             
}