3927. 【NOIP2014模擬11.6】可見點數 (Standard IO)
Time Limits: 1000 ms Memory Limits: 65536 KB
Description
ZPS經過長期的努力爭取,終於成爲了0901班的領操員,他要帶領0901班參加廣播操比賽。現在0901班的隊伍可以看作是一個n*n的點陣,每個人都站在格點上。現在作爲領操員的ZPS站(0,0)點,他想知道如果0901班的隊伍站齊了,他能看到多少個人的臉(假設每個人的身高相同,體積相同)。
Input
一個正整數n。
Output
ZPS能看到多少個人的臉(當然他是看不到自己的臉的)。
Sample Input
3
Sample Output
5
Data Constraint
40%的數據,n<=1500。
100%的數據,n<=100000。
題解
題目大意是求在
首先想到的是隻要
我們假設
問題就變成了求
求
代碼
#include<cstdio>
#define N 100005
long long phi[N];
long p[N],tot;
bool b[N];
int main()
{ long n,i,j;
long long ans=0;
scanf("%ld",&n);
if(n==1){
printf("0\n");
return 0;
}
phi[1]=1;
for(i=2;i<=n;i++){
if(!b[i]){
p[++tot]=i;
phi[i]=i-1;
}
for(j=1;j<=tot&&i*p[j]<=n;j++){
b[i*p[j]]=true;
if(i%p[j]==0){
phi[i*p[j]]=phi[i]*p[j];
break;
}else phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
for(i=1;i<n;i++)
ans+=phi[i];
printf("%lld\n",ans*2+1);
return 0;
}