作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。 现在,C君希望你告诉他队伍整齐时能看到的学生人数。
标签:
Description
作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。 现在,C君希望你告诉他队伍整齐时能看到的学生人数。
Input
共一个数N。
Output
共一个数,即C君应看到的学生人数。
Sample Input
4
Sample Output
9
Hint
【数据规模和约定】 对于 100% 的数据,1 ≤ N ≤ 40000
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <cmath> #include <sstream> #define N 50900 using namespace std; typedef long long ll; int vis[N],pri[N]; int cnt; void init() { cnt=0; for(int i=2;i<=N;i++) { if(vis[i]==0)pri[cnt++]=i; for(int j=0;j<cnt && i*pri[j]<N;j++) { vis[i*pri[j]]=1; if(i%pri[j]==0)break; } } } int main() { int n; init(); while(~scanf("%d",&n)) { if(n==1) { puts("1"); continue; } // for(int i=0;i<100;i++) // cout<<pri[i]<<" "; int num; int ans=0; for(int i=1;i<n;i++)//求n以内数的欧拉函数 { num=i; for(int j=0;j<cnt && pri[j]<=40009;j++) if(i%pri[j]==0) num=num*(pri[j]-1)/pri[j]; //cout<<"num="<<num<<endl; ans+=num; } printf("%d\n",ans*2+1); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/wust_zjx/article/details/46848025