1. 程式人生 > >[JZOJ 3927] 可見點數{尤拉函式}

[JZOJ 3927] 可見點數{尤拉函式}

題目

題意跟https://www.luogu.org/problemnew/show/P2158差不多。 即是求3+2i=1Nφ(i)3+2*\sum_{i=1}^{N}\varphi (i)

解題思路

線性篩和EratosthenesEratosthenes篩法都可以。 與其相似的題目:

程式碼Eratosthenes

#include<cstdio>
#include<cmath>
using namespace std; 
int n,phi[400001]; long long ans; 
int main() 
{
scanf("%d",&n); if (n==1) { printf("0"); return 0;} n--; for (int i=2;i<=n;i++) phi[i]=i; for (int i=2;i<=n;i++) { if (phi[i]==i) for (int j=i;j<=n;j+=i) phi[j]=phi[j]/i*(i-1); ans+=(long long)phi[i]; } printf("%lld",3+2*ans); }