精华内容
下载资源
问答
  • 欧拉函数的C实现
    2021-05-22 17:40:20

    /***********************************************************************

    * FileName      : 文件名

    * Version       : 版本

    * Description  : 对此文件的描述

    * Author        : 文件作者

    * Created       : 建立日期

    * History        : 以下开始记录修改历史

    * 1.Date         : 第一次修改时间

    * Author        : 作者

    * Modify         : 修改内容

    ***********************************************************************/

    #include

    int eular(int n)

    {

    int number = 1, i;

    for(i=2; i*i <= n; i++)

    {

    if(n%i == 0)

    {

    n /= i;

    number *= (i-1);

    while(n%i == 0)

    {

    n /= i;

    number *= i;

    }

    }

    }

    if(n > 1)

    {

    number *= (n-1);

    }

    return number;

    }

    int main()

    {

    int n, m;

    printf("请输入要判断的数字:");

    scanf_s("%d", &n);

    m = eular(n);

    printf("计算得:");

    printf("%d\n", m);

    }

    更多相关内容
  • 欧拉函数 C语言实现 #include "iostream" #include "math.h" #define maxsize 100 using namespace std; typedef struct node { int num; int total; }struct_num; struct_num a[maxsize]; int is_prime(int n)
  • 欧拉函数

    2021-05-22 17:40:19
    欧拉函数我们用$\phi(n)$表示欧拉函数定义:$\phi(n)$表示对于整数$n$,小于等于$n$中与$n$互质的数的个数性质1.$\phi(n)$为积性函数2.$\sum_{d|n}\phi(d)=n$3.$1$到$n$中与$n$互质的数的和为$n*\dfrac{\phi(n)}{2}(n...

    欧拉函数

    我们用$\phi(n)$表示欧拉函数

    定义:$\phi(n)$表示对于整数$n$,小于等于$n$中与$n$互质的数的个数

    性质

    1.$\phi(n)$为积性函数

    2.$\sum_{d|n}\phi(d)=n$

    3.$1$到$n$中与$n$互质的数的和为$n*\dfrac{\phi(n)}{2}(n>1)$

    计算方法

    $\sqrt(n)$计算单值欧拉函数

    假设我们需要计算$\phi(n)$

    分情况讨论

    1.当$n=1$时

    很明显,答案为$1$

    2.当$n$为质数时

    根据素数的定义,答案为$n-1$

    (仅有$n$与$n$不互质)

    3.当$n$为合数时

    我们已经知道了$n$为素数的情况

    不妨对$n$进行质因数分解

    设$n=a_1^{p_1}*a_2^{p_2}...*a_k^{p_k}$

    假设$k=1$

    那么$\phi(p^k)=p^k-p^{k-1}$

    证明:

    考虑容斥,与一个数互素的数的个数就是这个数减去与它不互素的数的个数

    因为$p$是素数,所以在$p^k$中与其不互素的数为$1*p$,$2*p$....$p^{k-1}*p$,有$p^{k-1}$个

    得证

    当$k\neq 1$时

    $$\phi(n)$$

    $$=\varphi \left( a^{p_{1}}_{1}a^{p_{2}\ldots }_{2}a^{Pk}_{k}\right)$$

    $$=\prod ^{k}_{i=1}a^{P_i}-a^{P_{i}-1}_{i}$$

    $$=\prod ^{k}_{i=1}a^{Pi}_{i}(1-\dfrac {1}{p_{i}})$$

    $$=n*\prod ^{k}_{i=1}(1-\dfrac {1}{p_{i}})$$

    #include#include#include#include

    #define LL long long

    using namespacestd;intmain()

    {

    LL N;while(cin>>N&&N!=0)

    {int limit=sqrt(N),ans=N;for(int i = 2; i <= limit ; ++i)

    {if(N%i==0) ans=ans/i*(i-1);while(N%i==0) N=N/i;

    }if(N>1) ans=ans/N*(N-1);

    printf("%d\n",ans);

    }return 0;

    }

    线性筛

    因为欧拉函数是积性函数

    因此可以使用线性筛法

    性质1

    若$p$为素数,则$\varphi \left( p\right) =p-1$

    证明:

    在$1-p$中,只有$(p,p)\neq1$

    性质2

    若$i mod p \neq  0$,且$p$为素数

    则$\varphi \left( i*p\right) =\varphi \left( i\right) *\varphi \left( p\right)$

    $=\varphi \left( i\ast p\right) =\varphi \left( i\right) \ast \left( p-1\right)$

    这一步同时利用了性质1和欧拉函数的积性

    性质3

    若$i mod p = 0$,且$p$为素数,

    则$\varphi \left( i\ast p\right) =\varphi \left( i\right) \ast p$

    证明:

    没怎么看懂,丢一个链接

    http://blog.csdn.net/Lytning/article/details/24432651

    #include#include#include#include

    #define LL long long

    using namespacestd;const int MAXN=1e6+10;int prime[MAXN],tot=0,vis[MAXN],phi[MAXN],N=10000;voidGetPhi()

    {for(int i=2;i<=N;i++)

    {if(!vis[i])

    {

    prime[++tot]=i;

    phi[i]=i-1;

    }for(int j=1;j<=tot&&prime[j]*i<=N;j++)

    {

    vis[ i*prime[j] ] = 1;if(i%prime[j]==0)

    {

    phi[ i*prime[j] ]=phi[i]*prime[j];break;

    }else phi[ i*prime[j] ]=phi[i]*(prime[j]-1);

    }

    }

    }intmain()

    {

    GetPhi();

    cin>>N;

    printf("%d\n",phi[N]);return 0;

    }

    例题

    放两道水题

    展开全文
  • 欧拉函数欢迎各位读者指出不足,谢谢~首先我们要知道欧拉函数是个什么东东?废话不多说~欧拉函数就是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) 。欧拉函数的通式:φ(n)=n*(1-1/p1)*(1-1...

    欧拉函数

    欢迎各位读者指出不足,谢谢~

    首先我们要知道欧拉函数是个什么东东?

    废话不多说~欧拉函数就是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) 。

    欧拉函数的通式:φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn),其中p1, p2……pn为n的所有质因数,n是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。

    对于上述的通式一定要牢记在心,因为这是计算欧拉函数最重要的一步。  切记切记~~~~

    好,最简单的,我们根据通式即可得 最简单的代码:

    int euler(int n)

    {

    int ans=n;

    for(int i=2;i*i<=n;i++){

    if(n%i==0){

    ans-=ans/i;

    while(n%i==0){

    n/=i;

    }

    }

    }

    if(n>1)ans-=ans/n;

    return ans;

    }

    晦涩难懂一:代码中的 ans-=ans/i;  这一步就是对应欧拉函数的通式~还是应该比较容易看懂的吧?

    晦涩难懂二:while(n%i==0)   n/=i;    这一个语句是为了保证完全消除我们刚才得到的那个i因子。确保我们下一个得到的i是n的素因子。

    晦涩难懂三:if(n>1)ans-=ans/n;  这个语句是为了保证我们已经除完了n的所有的素因子,有可能还会出现一个我们未除的因子,如果结尾出现n>1 ,说明我们还剩一个素因子木有除。

    看懂上述代码的就可以去练练手了~ 推荐题目:HDOJ  1787   题解:点击打开链接

    但是我们一般做的题当然不会这么简单啊~~来点稍微难一点点的。。。

    如果我们要求的数比较多,如果一个一个求那么很容易就超时,所以我们自然而然就想到——打表。

    如果我们依照上述思想,来个最朴素的打表。

    void euler()

    {

    p[1]=1;

    for(int i=2;i<=MAXN;i++){

    int n=i;

    p[i]=i;

    for(int j=2;j*j<=n;j++){

    if(n%j==0){

    p[i]=p[i]/j*(j-1);

    while(n%j==0) n=n/j;

    }

    }

    if(n>1) p[i]=p[i]/n*(n-1);

    }

    for(int i=2;i

    p[i]+=p[i-1];

    }

    这种打表方法并不是很理想。。。。

    下面推荐 两种较快的打表方法:

    ps:这种好像稍微快那么一点点~

    void euler()

    {

    E[1]=1;

    for(int i=2;i

    E[i]=i;

    for(int i=2;i

    if(E[i]==i)

    for(int j=i;j

    E[j]=E[j]/i*(i-1);

    }

    }

    }

    第二种:

    void euler()

    {

    for(int i=2;i

    if(!E[i])

    for(int j=i;j

    if(!E[j])E[j]=j;

    E[j]=E[j]/i*(i-1);

    }

    }

    }

    上述打表方法的思想和最初的是差不多的。但是它进行了优化,所以比较快。

    我们逐步分析一下:

    首先,在这里我们枚举的是素因子。因为素因子比较少,如果枚举素因子的话肯定会大大优化复杂度?

    那么,我们如何保证我们得到的就一定是个素因子呢?这就是我们if语句的作用,例如在第一种方法中,我们在第二个for 循环中就是把所有数,除以素因子。这样得到的复杂度一定比枚举每个数,然后找素因子(最开始那个打表法)这种打表要优化的多。

    推荐题目:HDOJ  2824   题解:点击打开链接

    在平时,我们做题,一般不会直接或者只是考察一个数的欧拉函数值。而是一些变形,或者是欧拉函数的一些性质。

    在这我总结了几个欧拉函数常用的性质,希望读者多多补充。

    欧拉函数性质(持续更新):

    ①N>1,不大于N且和N互素的所有正整数的和是 1/2*M*eular(N)。 推荐题目:HDOJ  3501   题解:点击打开链接

    ②若(N%a==0 && (N/a)%a==0) 则有:E(N)=E(N/a)*a;

    ③若(N%a==0 && (N/a)%a!=0) 则有:E(N)=E(N/a)*(a-1);

    展开全文
  • 三、欧拉函数

    2021-05-24 04:16:23
    )计算这个值的方法就叫做欧拉函数,以φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以 φ(n) = 4。φ(n) 的计算方法并不复杂,但是为了得到最后那个公式,需要一步步讨论。第一种情况如果n=1,则 φ(1)...

    请思考以下问题:

    任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成互质关系?)

    计算这个值的方法就叫做欧拉函数,以φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以 φ(n) = 4。

    φ(n) 的计算方法并不复杂,但是为了得到最后那个公式,需要一步步讨论。

    第一种情况

    如果n=1,则 φ(1) = 1 。因为1与任何数(包括自身)都构成互质关系。

    第二种情况

    如果n是质数,则 φ(n)=n-1 。因为质数与小于它的每一个数,都构成互质关系。比如5与1、2、3、4都构成互质关系。

    第三种情况

    如果n是质数的某一个次方,即 n = p^k (p为质数,k为大于等于1的整数),则

    ae3f34677908c4ed679ef45a001839c3.png

    比如 φ(8) = φ(2^3) =2^3 - 2^2 = 8 -4 = 4。

    这是因为只有当一个数不包含质数p,才可能与n互质。而包含质数p的数一共有p^(k-1)个,即1×p、2×p、3×p、...、p^(k-1)×p,把它们去除,剩下的就是与n互质的数。

    上面的式子还可以写成下面的形式:

    7b5910c06987fd8a0fc76b7ca2b2cd7a.png

    可以看出,上面的第二种情况是 k=1 时的特例。

    第四种情况

    如果n可以分解成两个互质的整数之积,

    n = p1 × p2

    φ(n) = φ(p1p2) = φ(p1)φ(p2)

    即积的欧拉函数等于各个因子的欧拉函数之积。比如,φ(56)=φ(8×7)=φ(8)×φ(7)=4×6=24。

    这一条的证明要用到"中国剩余定理",这里就不展开了,只简单说一下思路:如果a与p1互质(a

    第五种情况

    因为任意一个大于1的正整数,都可以写成一系列质数的积。

    fdfa576ee7170ece39c948288aaaa695.png

    根据第4条的结论,得到

    2ad84949bc74d3efb2f91d9085b89744.png

    再根据第3条的结论,得到

    ca952eff3ac5789ee7d3a02e7d3ce589.png

    也就等于

    1f87f1bd2cfcdb9009b719156cbad652.png

    这就是欧拉函数的通用计算公式。比如,1323的欧拉函数,计算过程如下:

    2612f879c628d9f8403815074adf8a06.png

    展开全文
  • 题目描述给定一个大于1,不超过2000000的正整数n,输出欧拉函数,phi(n)的值。如果你并不了解欧拉函数,那么请参阅提示。提示欧拉函数phi(n)是数论中非常重要的一个函数,其表示1到n-1之间,与n互质的数的个数。显然...
  • 欧拉函数C语言实现)

    千次阅读 2019-03-21 20:52:00
    欧拉函数(Euler's totient function)是指小于n的正整数中与n互质的数的数目,用φ(n)表示。特别的,φ(1)=1; 例如:φ(10)=4;1 3 7 9与10互质。 公式:φ(n)=n*(1-1/p(1))*(1-1/p(2))*(1-1/p(3))*...*(1-1/p...
  • 互质与欧拉函数

    2021-05-23 08:42:53
    gcd(a_i,n)=1\) 欧拉函数 欧拉函数 \(\boldsymbol \varphi(n)\) 定义为:小于等于 \(n\) 的正整数中,与 \(n\) 互质的数的个数 我们引入符号 \([condition]\) 为一个值:当 \(condition\) 为真时,值为 \(1\) ;...
  • 蓝桥杯试题 算法提高 欧拉函数[数论] 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述  老师出了一道难题,小酱不会做,请你编个程序帮帮他,奖金一瓶酱油:  从1—n中有多少个数与n互质?  |||||╭══╮ ┌...
  • #include<bits/stdc++.h> #include<iostream> using namespace std; int Prime_factor(int n) { int ans=n; for(int i=2;i*i<n;i++) { if(n%i==0) { ans=ans-ans/i; while(n%i==0) ... ...
  • 样例输入 30 样例输出 8 数据规模和约定 60%的数据≤10^6 100%的数据≤2*10^9 解题思路: 这道题目最关键的一点是使用欧拉函数!!! 如果你不用欧拉函数,而是通过for循环,从1到n分别判断是否互为质数(用辗转...
  • 蓝桥杯 算法提高 欧拉函数

    千次阅读 2017-10-01 16:59:16
    算法提高 欧拉函数 时间限制:1.0s 内存限制:512.0MB   说明  2016.4.5 已更新试题,请重新提交自己的程序。 问题描述  给定一个大于1,不超过2000000的正整数n,输出欧拉函数,phi(n)的值。  如果你...
  • 欧拉函数

    2018-08-21 19:23:00
    欧拉函数 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目 显然对素数n,phi(n)=n-1 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)...
  • C.欧拉函数

    2021-11-25 19:41:00
    欧拉函数 题目描述 在数论中,欧拉函数f(n)被定义为:小于等于n的正整数中和n互质的数的数目(互质即两者最大公约数为1) 如f(1)=1,因为与小于等于1的数中与1互质的数只有1 再如f(8)=4,因为小于等于8中的数与8...
  • 欧拉函数定义 求欧拉函数的方法 1.公式法 2.线性筛法 根据三条性质来解题的: //1、当p为质数的时候:phi(p)=p-1 //2、当p与i互质时有: phi(p*i)=phi(p)*phi(i) //3、当i%p==0时有:phi(p*i)=p*phi(i) 具体实现...
  • C. 欧拉函数

    2022-01-05 23:14:49
    #include<stdio.h> int gcd(int m,int n) { int r,temp; if(m<n) { temp=m;m=n;n=temp; } r=m%n; while(r!=0) { m=n; n=r; r=m%n; } return n; } int f(int n) { ... ...
  • ///欧拉函数求小于等于n的正整数中有多少个数与n互质 { int s=n,i; for (i= 2 ; i sqrt (n); i++) if (n%i== 0 ) { s=s/i*(i- 1 ); while (n%i== 0 ) n/=i; } if (n> 1 ) s=s/n*(n- 1 ); return ...
  • 欧拉函数打表(备忘)

    千次阅读 2012-08-24 17:43:18
    const int N(1000000); int a[N+10]; void euler() { for(int i=2;i;i++) { if(!a[i]) for(int j=i;j;j+=i) { if(!a[j]) a[j]=j; a[j]=a[j]/i*(i-1); } } }
  • 定义:欧拉函数表示1-N中与N互质的数的个数; 给定一个数n,求在[1,n]这个范围内两两互质的数的个数 对于这个范围内的每一个数,我们只要找到不超过这个数且与这个数互质的数的个数就可以了 欧拉函数用希腊字母φ...
  • 欧拉函数 问: 给定一个正整数 N,求 1 ~ N 中与N互质的数的个数。 最暴力的做法就是从1遍历到N对每个数用gcd判断是否互质,这种的时间复杂度是O(N logN)。这样就比较慢了,而欧拉函数可以将时间复杂度降到O(N\...
  • 在数论中,欧拉定理(Euler Theorem,也称费马-欧拉定理或欧拉函数定理)是一个关于同余的性质。 欧拉定理有什么用?欧拉定理是RSA算法的核心。要实现RSA算法,需要编程实现此定理。 那么什么是同余?余,就是余数...
  • <code>int modd(int x, int y) { int sign; if (x > y) { sign = x; x = y; y = sign; } //sign为余数的标志符号 while (x !...如13的欧拉函数应该是12输出却为6</p>
  • Relatives Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15712 Accepted: 7967 Description Given n, a positive integer, how many positive integers less than n are relatively...
  • 欧拉函数公式证明

    万次阅读 多人点赞 2018-09-14 15:45:04
    计算这个值的方法就叫做欧拉函数,以φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以 φ(n) = 4。 φ(n) 的计算方法并不复杂,但是为了得到最后那个公式,需要一步步讨论。 第一种情况 如果n=1,则 ...
  • 题目 1541: 欧拉函数

    2022-03-09 14:01:27
    给定一个大于1,不超过2000000的正整数n,输出欧拉函数,phi(n)的值。 如果你并不了解欧拉函数,那么请参阅提示。 提示 欧拉函数phi(n)是数论中非常重要的一个函数,其表示1到n-1之间,与n互质的数的个数。显然的,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,268
精华内容 907
关键字:

欧拉函数c语言