4939 欧拉函数

Posted 自为

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4939 欧拉函数相关的知识,希望对你有一定的参考价值。

 
题目描述 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

 

n欧拉函数的性质(以下性质中p为素数)
n1、φ(p)=p-1
n2、φ(i*p)=p*φ(i),i%p==0
n3、φ(i*p)=(p-1)*φ(i),i%p!=0
n
n根据以上性质可以得出欧拉函数的线性筛法。
 

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #define lli long long int 
 7 using namespace std;
 8 void read(lli &n)
 9 {
10     char c=+;lli x=0;bool flag=0;
11     while(c<0||c>9)
12     {c=getchar();if(c==-)flag=1;}
13     while(c>=0&&c<=9)
14     {x=x*10+(c-48);c=getchar();}
15     flag==1?n=-x:n=x;
16 }
17 int main()
18 {
19     lli n;lli ans;
20     while(cin>>n)
21     {
22         if(n==0)break;
23         ans=n;
24         if(n%2==0)
25         {
26             while(n%2==0)
27                 n=n/2;
28             ans=ans/2;
29         }
30         for(lli i=3;i*i<=n;i+=2)
31         {
32             if(n%i==0)
33             {
34                 while(n%i==0)    n=n/i;
35                 ans=ans/i*(i-1);
36             }
37         }
38         if(n>1)
39             ans=ans/n*(n-1);
40         cout<<ans<<endl;
41     }
42     return 0;
43 }

 

以上是关于4939 欧拉函数的主要内容,如果未能解决你的问题,请参考以下文章

欧拉函数知识点总结及代码模板及欧拉函数表

欧拉函数及代码实现

欧拉Euler函数

HDU 2588 GCD(欧拉函数)

蓝桥杯必备算法一:欧拉函数

数论之旅4---欧拉函数的证明及代码实现(我会证明都是骗人的╮( ̄▽ ̄)╭)