游客 Signup | Login
中文 | En

3222 - 公约数

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

Input

一行一个数N

Output

一个数表示答案

Examples

Input

4

Output

4

Hint

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

Solution 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

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

Time Limit 2 seconds
Memory Limit 128 MB
Discuss Stats
上一题 下一题