3222 - 公约数

给出一个数N,求1<=x,y<=N,且gcd(x,y)为素数的数对x,y 的数量

题目输入

一行一个数N

题目输出

一个数表示答案

输入/输出样例

题目输入

4

题目输出

4

提示

【Hint】
4 对x,y 为(2,2),(2,4),(3,3),(4,2)
对于20%的数据,N<=1000
对于100%的数据,N<=10000000

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);             
}
        

提示

【Hint】
4 对x,y 为(2,2),(2,4),(3,3),(4,2)
对于20%的数据,N<=1000
对于100%的数据,N<=10000000

时间限制 2 秒
内存限制 128 MB
讨论 统计
上一题 下一题