1. 程式人生 > >BZOJ-2190: [SDOI2008]儀仗隊 (歐拉函數)

BZOJ-2190: [SDOI2008]儀仗隊 (歐拉函數)

stdout 根據 size com borde pro tput include return

2190: [SDOI2008]儀仗隊

Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 3483 Solved: 2259
[Submit][Status][Discuss]

Description

  作為體育委員,C君負責這次運動會儀仗隊的訓練。儀仗隊是由學生組成的N * N的方陣,為了保證隊伍在行進中整齊劃一,C君會跟在儀仗隊的左後方,根據其視線所及的學生人數來判斷隊伍是否整齊(如下圖)。    技術分享   現在,C君希望你告訴他隊伍整齊時能看到的學生人數。

Input

  共一個數N。

Output

  共一個數,即C君應看到的學生人數。

Sample Input

  4

Sample Output

  9


HINT

【數據規模和約定】   對於 100% 的數據,1 ≤ N ≤ 40000

Source

這題laj去年一定做過【思考.jpg】歐拉函數裸題

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 typedef long long LL;
 4 const int MAX=40005;
 5 int n,phi[MAX],ans;
 6 void eular(){
 7     int i,j;
 8     for (i=1;i<MAX;i++) phi[i]=i;
9 for (i=2;i<MAX;i+=2) phi[i]/=2; 10 for (i=3;i<MAX;i+=2) 11 if (phi[i]==i) 12 for (j=i;j<MAX;j+=i) 13 phi[j]=phi[j]/i*(i-1); 14 } 15 int main(){ 16 freopen ("millitry.in","r",stdin);freopen ("millitry.out","w",stdout); 17 int i,j; 18 scanf("
%d",&n); 19 eular(); 20 for (i=1;i<n;i++) ans+=phi[i]; 21 printf("%d",ans*2+1); 22 return 0; 23 }

BZOJ-2190: [SDOI2008]儀仗隊 (歐拉函數)