Relatives POJ - 2407 欧拉函数

Posted kongbursi-2292702937

tags:

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

题意:

给你一个正整数n,问你在区间[1,n)中有多少数与n互质

 

题解:

1既不是合数也不是质数(1不是素数)

互质是公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数 所以1与任何整数都互质

技术图片

 

 

根据欧拉函数求解 欧拉函数是少于或等于n的数中与n互质的数的数目。 欧拉函数的性质:它在整数n上的值等于对n进行素因子分解后,所有的素数幂上的欧拉函数之积。 欧拉函数的值  通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。 φ(1)=1(唯一和1互质的数(小于等 于1)就是1本身)。 (注意:每种质因数只一个。比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4)

推论:当n为奇数时,有φ(2n)=φ(n)。

 

若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。 设n为正整数,以 φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值,这里函数φ:N→N,n→φ(n)称为欧拉函数。 欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)。

特殊性质:当n为奇数时,φ(2n)=φ(n), 证明与上述类似。

 

解释:

1、为什么欧拉函数是φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn)

两个数互质是除了1不能有其他公约数 如果一个数和n互质,那么他们就没有公因数,那么我们让总数减去所有与n有公因数的数的数量就可以了 比如与n有公因数x的数的数量有多少,那不就有n/x个嘛。

所以就是这样慢慢减

2、当n为奇数时,有φ(2n)=φ(n)。

我们要求2n的互质数量,那么2n与公因数为2的数的数量由n个,所以可以说1——n这一段数都不与2n互质

 

 

代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<math.h>
 6 using namespace std;
 7 typedef long long ll;
 8 const int maxn=100005;
 9 int oula(int n)
10 {
11     int ans=n;
12     for(int i=2; i<=sqrt(n); ++i)
13     {
14         if(n%i==0)
15         {
16             ans=ans-ans/i;
17             n/=i;
18             while(n%i==0)
19                 n/=i;
20         }
21     }
22     if(n>1)
23         ans=ans-ans/n;
24     return ans;
25 }
26 int main()
27 {
28     int n;
29     while(~scanf("%d",&n) && n)
30     {
31         int result=oula(n);
32         printf("%d
",result);
33     }
34     return 0;
35 }

 

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

POJ2407 Relatives(欧拉函数)

Relatives POJ - 2407 欧拉函数

Relatives POJ - 2407 欧拉函数

POJ 2407 Relatives

poj2407(欧拉函数模板题)

POJ2407(欧拉函数)