模板——欧拉函数

//计算欧拉phi函数,phi(n)为不超过n且与n互素的整数个数
int euler_phi(int n) {
    int m = (int)sqrt(n+0.5);
    int ans = n;
    for(int i = 2; i <= m; i++) if(n % i == 0){
        ans = ans / i * (i-1);
        while(n % i == 0) n /= i;
    }
    if(n > 1) ans = ans / n * (n-1);
    return ans;
}

//用类似筛法计算phi_table
int phi[maxn];
void phi_table(int n) {
    for(int i = 2; i <= n; i++) phi[i] = 0;
    phi[1] = 1;
    for(int i = 2; i <= n; i++) if(!phi[i]){
        for(int j = i; j <= n; j++) {
            if(!phi[j]) phi[j] = j;
            phi[j] = phi[j] / i * (i-1);
        }
    }
}
时间: 2024-12-31 19:28:35

模板——欧拉函数的相关文章

数论 - 欧拉函数模板题 --- poj 2407 : Relatives

Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11372   Accepted: 5544 Description Given n, a positive integer, how many positive integers less than n are relatively prime to n? Two integers a and b are relatively prime if ther

数论快速入门(同余、扩展欧几里德、中国剩余定理、大素数测定和整数分解、素数三种筛法、欧拉函数以及各种模板)

数学渣渣愉快的玩了一把数论,来总结一下几种常用的算法入门,不过鶸也是刚刚入门, 所以也只是粗略的记录下原理,贴下模板,以及入门题目(感受下模板怎么用的) (PS:文中蓝色字体都可以点进去查看百度原文) 附赠数论入门训练专题:点我打开专题(题目顺序基本正常,用以配套数论入门) 一.同余定理 简单粗暴的说就是:若 a-b == m 那么 a%m == b%m 这个模运算性质一眼看出...直接上入门水题: Reduced ID Numbers 附AC代码(这个也没啥模板....知道就好) #inclu

hdu2824 The Euler function 筛选法求欧拉函数模板题

//求a , b范围内的所有的欧拉函数 //筛选法求欧拉函数模板题 #include<cstdio> #include<cstring> #include<iostream> using namespace std ; const int maxn = 3000010 ; typedef __int64 ll ; int e[maxn] ; int a ,  b ; void Euler() { int i,j; for (i=1;i<maxn;i++) e[i]

HDU 1286 找新朋友(欧拉函数模板)

HDU 1286 找新朋友 题意:中文题. 思路:欧拉函数的纯模板题,没什么好说的,主要是理解欧拉函数的意义. 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等. 例如φ(8)=4,因为1,3,5,7均和8互质.   ----by度娘. #include <stdio.h> int eular(int n){ int ret = 1; for(int i = 2; i*

欧拉函数性质以及模板

概念: 在数论,对正整数n,欧拉函数是小于n的数中与n互质的数的数目. 性质: ,其中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是质数p的k次幂, ,因为除了p的倍数外,其他数都跟n互质. 设n为正整数,以 φ(n)表示不超过n且与n互 素的正整数的个数,称为n的欧拉函数值,这里函数 φ:N→N,n→φ(n)称为欧拉

P2158 [SDOI2008] 仪仗队(欧拉函数模板)

题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图). 现在,C君希望你告诉他队伍整齐时能看到的学生人数. 分析就不写了都写得很<<<<全>>>>了就当看模板叭 #include<iostream> #include<cstdio> using namespace std; typede

欧拉函数(模板,相关问题持续更新中)

欧拉函数是一个很有用的东东.可以被扩展用来解决许多与素数相关的问题,逆元问题,欧拉函数降幂等! 概念:欧拉函数是小于或等于n的正整数中与n互质的数的数目(特别地φ(1)=1),若n为质数可直接根据性质得出,否则的话要求解. 求解模板: 1 int Euler(int n) 2 { 3 if(n==1) return 1; 4 int ans=n; 5 6 for(int i=2;i*i<=n;++i) 7 { 8 if(n%i==0) 9 { 10 while(n%i==0) n/=i; 11

欧拉函数模板

//直接求解欧拉函数int euler(int n){ //返回euler(n)      int res=n,a=n;     for(int i=2;i*i<=a;i++){         if(a%i==0){             res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出              while(a%i==0) a/=i;         }     }     if(a>1) res=res/a*(a-1);     return re

算法模板——单个值欧拉函数

输入N,输出phi(N) 这样的单个值欧拉函数程序一般见于部分数论题,以及有时候求逆元且取模的数不是质数的情况(逆元:A/B=A*Bphi(p)-1 (mod p),一般常见题中p是质数,phi(p)-1=p-2) (Tip:我是来水经验的不解释,不过话说真的好久没写这个了TT) 1 var i:int64; 2 function Eula(x:int64):int64; 3 var res:int64;i:longint; 4 begin 5 res:=x; 6 for i:=2 to tru