题目描述
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对.
输入输出格式
输入格式:
一个整数N
输出格式:
答案
输入输出样例
输入样例#1:
4
输出样例#1:
4
说明
对于样例(2,2),(2,4),(3,3),(4,2)
1<=N<=10^7
#include<cstdio>
typedef long long ll;
const int N=1e7+10;
int n,p,prime[N/10],phi[N];
bool iscomp[N];
ll sum[N],ans;
void eular()
{
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(!iscomp[i])prime[p++]=i,phi[i]=i-1;
for(int j=0;j<p&&i*prime[j]<=n;j++)
{
iscomp[i*prime[j]]=1;
phi[i*prime[j]]=phi[i]*(i%prime[j]?prime[j]-1:prime[j]);
}
}
}
int main()
{
scanf("%d",&n);
eular();
for(int i=1;i<=n;i++)sum[i]=sum[i-1]+phi[i];
for(int i=0;i<p;i++)ans+=sum[n/prime[i]]*2-1;
printf("%lld\n",ans);
return 0;
}
总结
考察公式推导。数论这一节各种定理推论……之前求欧拉函数表还有点迷,翻了书