【題解】洛谷P2568(bzoj2818)GCD 尤拉函式+字首和
阿新 • • 發佈:2018-12-10
題目描述
給定整數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; }
總結
考察公式推導。數論這一節各種定理推論……之前求尤拉函式表還有點迷,翻了書