首页 > 代码库 > codevs 4939 欧拉函数

codevs 4939 欧拉函数

传送门

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 欧拉函数