1. 程式人生 > >codevs 4939 歐拉函數

codevs 4939 歐拉函數

using ddl cloc main pre 測試數據 active strong 輸入

傳送門

4939 歐拉函數

時間限制: 1 s 空間限制: 1000 KB 題目等級 : 鉆石 Diamon 題目描述 Description

輸入一個數n,輸出小於n且與n互素的整數個數

輸入描述 Input Description

包含多組數據,n=0時結束

測試數據組數不會很多,不必先打表後輸出

輸出描述 Output Description

一組數據一行

樣例輸入 Sample Input

364684

346

5432

11

24

0

2333333

233333333

0

233333333333333

2333333333333333333333333333333333333333333333333

樣例輸出 Sample Output

165120

172

2304

10

8

數據範圍及提示 Data Size & Hint

1<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 long
i=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 歐拉函數