数学 欧拉函数相关

欧拉函数相关

1,\(phi(i)\)表示在1到i的数中与i互质的数的个数。

2,\(O(\sqrt{n})\)求\(phi\)

? 算数基本定理:
\[
phi(i)=i*(p_1-1)/p_1*(p_2-1)/p_2*……*(p_k-1)/p_k
\]
? 枚举质因数套公式即可:

? code:

int phi(int x){
    int re=x;
    for(int i=2;i*i<=x;i++){
        if(x%i==0){
            re=re/i*(i-1);
            while(x%i==0)x/=i;
        }
    }
    if(x>1)re=re/x*(x-1);
    return re;
}

3,线性筛欧拉函数

? 1,如果当前数是质数,易知:
\[
phi(i)=i-1
\]
? 2,如果当前数取模枚举的质数不等于零,则:
\[
phi(i*prime[j])=phi(i)*phi(prime[j])
\]
? 3,如果当前数取模枚举的质数等于零,则:
\[
phi(i*prime[j])=phi(i)*prime[j]
\]
开始愉快地写代码:

void Euler_phi(){
    memset(isprime,1,sizeof isprime);
    phi[1]=1;
    for(int i=2;i<=n;i++){
        if(isprime[i]){
            phi[i]=i-1; prime[++tot]=i;
        }
        for(int j=1;j<=tot&&i*prime[j]<=n;j++){
            isprime[i*prime[j]]=0;
            if(i%prime[j]!=0){
                phi[i*prime[j]]=phi[i]*phi[prime[j]];
            }
            else{
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            }
        }
    }
}

原文地址:https://www.cnblogs.com/wangxiaodai/p/9907450.html

时间: 2024-08-18 13:53:29

数学 欧拉函数相关的相关文章

【学习总结】数学-欧拉函数

定义 欧拉函数f(n)表示小于n并且与n互质的数的个数 f(n)=n(1?1p1)(1?1p2)-(1?1pk)(pi为n的质因子) 代码 C++ 单个处理 int eulerPhi(int n) { int m = (int)sqrt(n+0.5); in 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)

一类欧拉函数相关的求和式推导

\(\\\) 写在前面 因为最近做了不少和欧拉函数相关的求和问题,而这一类求和的推导有没有涉及到反演和卷积,所以单独写一写. 给出的题目顺序与难度大致无关,是按照个人做题的顺序安排的. 再次声明欧拉函数的定义:\(\varphi(x)\) 表示 \([1,x]\) 里的所有整数中,与 \(x\) 互质的数的个数. 下面的叙述中均用 \((x,y)\) 表示 \(gcd(x,y)\) ,用 \([x,y]\) 表示 \(lcm(x,y)\) . \(\\\) 欧拉函数的两种常用求法 公式法,单点复

【BZOJ4173】数学 欧拉函数神题

[BZOJ4173]数学 Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N,M<=10^15 题解:STEP 1: 这步还是很容易的吧~毕竟原来的式子不太舒服.但是注意,最后一个式子的取值只能为0或1,所以就变成了. STEP 2: 这步倒是难理解一些,但是考虑:我们将这三个等式都算出来,如果满足了左边那个条件,那么这三个等式加起来为1,对答案的贡献正好为$\varphi

NOIP模拟:切蛋糕(数学欧拉函数)

题目描述  BG 有一块细长的蛋糕,长度为 n. 有一些人要来 BG 家里吃蛋糕, BG 把蛋糕切成了若干块(整数长度),然后分给这些人. 为了公平,每个人得到的蛋糕长度和必须相等,且必须是连续的一段. 但是, BG 并不知道要有多少人来. 他只知道, 来的人数为n的约数,且小于n. 显然把蛋糕平均分成 n 块一定能满足要求.但是, BG 想要分出的块数尽量少.现在 BG 想知道,他要把蛋糕分成至少多少块,才能使得不管多少人来都能满足要求. 输入格式 输入文件名为 cake.in. 输入共一个整

欧拉函数相关的题目

POJ 1284 求原根个数: 即求 euler(euler(p)) = euler(p-1) 其中p为奇素数 又有 euler(x) = x*(1-1/p1)*...*(1-1/pk)  其中pk为x的质因数 #include <cstdio> #include <cstring> int all, p, ans, num[100000]; bool pd[100000]; int main() { pd[1] = 1; for(int i = 1; i < 100000;

[数学][欧拉降幂定理]Exponial

题目描述 Illustration of exponial(3) (not to scale), Picture by C.M. de Talleyrand-Périgord via Wikimedia Commons Everybody loves big numbers (if you do not, you might want to stop reading at this point). There are many ways of constructing really big nu

【BZOJ-4173】数学 欧拉函数 + 关于余数的变换

4173: 数学 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 306  Solved: 163[Submit][Status][Discuss] Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N,M<=10^15 Source Solution 数论好题,开始无从下手,推导后感觉新姿势++ 题目大意:求$\varphi(

LA 7362 Farey (数学,欧拉函数)

题意:给定一个数 n,问你0<= a <=n, 0 <= b <= n,有多少个不同的最简分数. 析:这是一个欧拉函数题,由于当时背不过模板,又不让看书,我就暴力了一下,竟然AC了,才2s,题目是给了3s,很明显是由前面递推,前面成立的,后面的也成立, 只要判定第 i 个有几个,再加前 i-1 个就好,第 i 个就是判断与第 i 个互质的数有多少,这就是欧拉函数了. 代码如下: 这是欧拉函数的. #pragma comment(linker, "/STACK:102400

UVA 11426 - GCD - Extreme (II) 欧拉函数-数学

Given the value of N, you will have to ?nd the value of G. The de?nition of G is given below:G =i<N∑i=1j∑≤Nj=i+1GCD(i, j)Here GCD(i, j) means the greatest common divisor of integer i and integer j.For those who have trouble understanding summation no