codevs 4939 歐拉函數
阿新 • • 發佈:2017-06-08
using ddl cloc main pre 測試數據 active strong 輸入
傳送門
4939 歐拉函數
時間限制: 1 s 空間限制: 1000 KB 題目等級 : 鉆石 Diamon 題目描述 Description輸入一個數n,輸出小於n且與n互素的整數個數
輸入描述 Input Description包含多組數據,n=0時結束
測試數據組數不會很多,不必先打表後輸出
輸出描述 Output Description一組數據一行
樣例輸入 Sample Input364684
346
5432
11
24
0
2333333
233333333
0
233333333333333
2333333333333333333333333333333333333333333333333
樣例輸出 Sample Output
165120
172
2304
10
8
數據範圍及提示 Data Size & Hint1<n<9223372036854775807
【code】
搬來了幾個模板
#include<cstdio> using namespace std; long long n,ans; int main() { while(1) { scanf("%lld",&n); if(!n) break; ans=n; for(long longi=2;i*i<=n;i++) if(n%i==0) { while(n%i==0) n/=i; ans=ans/i*(i-1); } if(n>1) ans=ans/n*(n-1); printf("%lld\n",ans); } }
#include<cstdio> using namespace std; int main() { long long n,ans; while(1) { scanf("%lld",&n); if(!n) return 0; ans=n; if(n%2==0) { while(n%2==0) n/=2; ans=ans/2; } for(long long i=3;i*i<=n;i+=2) if(n%i==0) { while(n%i==0) n/=i; ans=ans/i*(i-1); } if(n>1) ans=ans/n*(n-1); printf("%lld\n",ans); } }
codevs 4939 歐拉函數