欧拉函数[caioj1158]

1 1 1~ N N N中与 N N N互质的数的个数被成为欧拉函数,记为 φ ( N ) \varphi(N) φ(N)
在算数基本定理中, N = p 1 c 1 p 2 c 2 . . . p m c m ( ∀ p i 皆 为 质 数 ) N=p_1^{c_1}p_2^{c_2}...p_m^{c_m}(\forall p_i皆为质数) N=p1c1p2c2...pmcm(pi)则:
φ ( N ) = N ∗ ( p 1 − 1 p 1 ) ∗ ( p 2 − 1 p 2 ) ∗ . . . . . . ∗ ( p m − 1 p m ) = N ∗ ∏ 质 数 p ∣ N ( 1 − 1 p ) \varphi(N)=N*(\frac{p_1-1}{p1})*(\frac{p_2-1}{p2})*......*(\frac{p_m-1}{pm})=N*\prod_{质数 p|N}(1-\frac{1}{p}) φ(N)=N(p1p11)(p2p21)......(pmpm1)=NpN(1p1)
证明:设 p , q p,q p,q N N N的质因子,则 1 1 1~ N N N中p,q的倍数为

p , 2 p , 3 p , . . . . . . . , N / p , q , 2 q , 3 q , . . . . . . , N / q ( p q 的 倍 数 被 筛 了 2 遍 ) p,2p,3p,.......,N/p,q,2q,3q,......,N/q(pq的倍数被筛了2遍) p,2p,3p,.......,N/p,q,2q,3q,......,N/q(pq2)

共有 N / p + N / q − N / p q N/p+N/q-N/pq N/p+N/qN/pq个(由算数基本定理可知, p q pq pq一定 ≤ N ≤N N),则 1 1 1~ N N N中不与

N N N含有共同质因子 p p p q q q的数的个数为:
N − ( N p ) − ( N q ) + ( N p q ) = N ∗ ( 1 − 1 p − 1 q + 1 p q ) = N ( 1 − 1 p ) ( 1 − 1 q ) N-(\frac{N}{p})-(\frac{N}{q})+(\frac{N}{pq})=N*(1-\frac{1}{p}-\frac{1}{q}+\frac{1}{pq})=N(1-\frac{1}{p})(1-\frac{1}{q}) N(pN)(qN)+(pqN)=N(1p1q1+pq1)=N(1p1)(1q1)
推广到多种情况(全部质因子),用数学归纳法证明即可。
证毕。
欧拉函数性质

  1. ∀ n > 1 , 1 \forall n>1,1 n>1,1~ n n n中与n互质的数的和为 n / 2 ∗ φ ( n ) n/2*\varphi(n) n/2φ(n)

证明: ∵ 与 n 互 质 的 x , g c d ( n , x ) = g c d ( n , n − x ) , ∴ 与 n 互 质 的 x , n − x 成 对 出 现 , 平 均 值 为 n / 2. 因 此 与 n 互 质 的 数 的 平 均 值 也 为 n / 2 , 证 毕 。 \because 与n互质的x,gcd(n,x)=gcd(n,n-x),\therefore 与n互质的x,n-x成对出现,平均值为n/2.因此与n互质的数的平均值也为n/2,证毕。 nxgcd(n,x)=gcd(n,nx)nxnxn/2.nn/2

  1. 若a,b互质,则 φ ( a b ) = φ ( a ) φ ( b ) \varphi(ab)=\varphi(a)\varphi(b) φ(ab)=φ(a)φ(b)
    证明: ∵ φ ( a ) = a ∗ ∏ 质 数 p ∣ a ( 1 − 1 p ) , φ ( b ) = b ∗ ∏ 质 数 p ∣ b ( 1 − 1 p ) , φ ( a b ) = a b ∗ ∏ 质 数 p ∣ a b ( 1 − 1 p ) = a b ∗ ∏ 质 数 p ∣ a ( 1 − 1 p ) ∗ ∏ 质 数 p ∣ b ( 1 − 1 p ) , 由 于 两 数 互 质 , 无 公 共 质 因 子 。 证 毕 。 \because \varphi(a)=a*\prod_{质数p|a}(1-\frac{1}{p}),\varphi(b)=b*\prod_{质数p|b}(1-\frac{1}{p}),\varphi(ab)=ab*\prod_{质数p|ab}(1-\frac{1}{p})=ab*\prod_{质数p|a}(1-\frac{1}{p})*\prod_{质数 p|b}(1-\frac{1}{p}),由于两数互质,无公共质因子。证毕。 φ(a)=apa(1p1),φ(b)=bpb(1p1),φ(ab)=abpab(1p1)=abpa(1p1)pb(1p1),
    依照性质2,可得积性函数
  2. f f f是积性函数,且在算术基本定理中 n = ∏ i = 1 m p i c i n=\prod_{i=1}^{m}p_i^{c{i}} n=i=1mpici,根据积性函数定义式可得。
  3. p ∣ n p\mid n pn p 2 ∣ n p^2\mid n p2n,则 φ ( n ) = φ ( n / p ) ∗ p \varphi(n)=\varphi(n/p)*p φ(n)=φ(n/p)p
    证明: φ ( n ) = n ∗ ∏ 质 数 w ∣ n ( 1 − 1 w ) = ( n / p ) ∗ ∏ 质 数 w ∣ n / p ( 1 − 1 w ) ∗ p = φ ( n / p ) ∗ p \varphi(n)=n*\prod_{质数w\mid n}(1-\frac{1}{w})=(n/p)*\prod_{质数 w\mid n/p}(1-\frac{1}{w})*p=\varphi(n/p)*p φ(n)=nwn(1w1)=(n/p)wn/p(1w1)p=φ(n/p)p,由于 n / p n/p n/p n n n所含质因子相同,只是 p p p的指数不同罢了,所以等式成立。
  4. p 是 质 数 , p ∣ n p是质数,p\mid n p,pn p 2 ∤ n p^2\nmid n p2n,则 φ ( n ) = φ ( n / p ) ∗ ( p − 1 ) \varphi(n)=\varphi(n/p)*(p-1) φ(n)=φ(n/p)(p1)
    证明: ∵ n / p 与 p 互 质 , 则 φ ( n ) = φ ( n / p ) ∗ φ ( p ) = φ ( n / p ) ∗ ( p − 1 ) \because n/p与p互质,则\varphi(n)=\varphi(n/p)*\varphi(p)=\varphi(n/p)*(p-1) n/ppφ(n)=φ(n/p)φ(p)=φ(n/p)(p1)
  5. ∑ d ∣ n φ ( d ) = n \sum_{d \mid n}\varphi(d)=n dnφ(d)=n
    证明: 设 f ( n ) = ∑ d ∣ n φ ( d ) , f ( m ) = ∑ d ∣ m φ ( d ) 设f(n)=\sum_{d \mid n}\varphi(d),f(m)=\sum_{d \mid m}\varphi(d) f(n)=dnφ(d),f(m)=dmφ(d), 若 n , m 互 质 , φ 是 积 性 函 数 若n,m互质,\varphi是积性函数 n,mφ f ( n m ) = ∑ d ∣ n m φ ( d ) = ∑ d ∣ n φ ( d ) ∗ ∑ d ∣ m φ ( d ) = f ( n ) ∗ f ( m ) f(nm)=\sum_{d \mid nm}\varphi(d)=\sum_{d \mid n}\varphi(d)*\sum_{d \mid m}\varphi(d)=f(n)*f(m) f(nm)=dnmφ(d)=dnφ(d)dmφ(d)=f(n)f(m), 即 ∑ d ∣ n φ ( d ) 是 积 性 函 数 , 对 于 单 个 质 因 子 , f ( p m ) = φ ( 1 ) + φ ( p ) + φ ( p 2 ) + . . . . . . + φ ( p m ) 即\sum_{d \mid n}\varphi(d)是积性函数,对于单个质因子,f(p^{m})=\varphi(1)+\varphi(p)+\varphi(p^2)+......+\varphi(p^m) dnφ(d)f(pm)=φ(1)+φ(p)+φ(p2)+......+φ(pm)根据性质4,我们可以发现 f ( p m ) f(p^m) f(pm)等比数列求和+1,即 f ( p m ) = 1 + ( p − 1 − ( p − 1 ) ∗ p m 1 − p ) = p m . f(p^m)=1+(\frac{p-1-(p-1)*{p^m}}{1-p})=p^m. f(pm)=1+(1pp1(p1)pm)=pm.所以 f ( n ) = ∏ i = 1 m f ( p i c i ) = ∏ i = 1 m p i c i = n f(n)=\prod_{i=1}^{m}f(p_i^{c_i})=\prod_{i=1}^{m}p_i^{c_i}=n f(n)=i=1mf(pici)=i=1mpici=n性质6成立.

题目描述

φ ( x ) \varphi(x) φ(x)表示小于或等于x的正整数中与n互质的数的数目。。
有n次询问,每次问 φ ( x ) \varphi(x) φ(x)的值。
【输入格式】
第一行 n n n( 1 &lt; = n &lt; = 10000 1&lt;=n&lt;=10000 1<=n<=10000)
下来n行,每行一个整数x,表示求 φ ( x ) \varphi(x) φ(x)。( 1 &lt; = x &lt; = 20000000 1&lt;=x&lt;=2000 0000 1<=x<=20000000)
【输出格式】
每次询问输出一行一个整数 φ ( x ) \varphi(x) φ(x)
【样例输入】
3
10
20
100
【样例输出】
4
8
40

代码

1.运用性质4、5

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int N=1270608;
const int M=2e7+10;
const int inf=2e7;
int prime[N],phi[M],m;
bool v[M];
void g_p()
{
    m=0;
    memset(v,true,sizeof(v));
    for(int i=2;i<=inf;i++)
    {
        if(v[i])prime[++m]=i,phi[i]=i-1;
        for(int j=1;j<=m&&i*prime[j]<=inf;j++)
        {
            v[i*prime[j]]=false;
            if(i%prime[j]==0)
            {
                phi[i*prime[j]]=prime[j]*phi[i];
                break;
            }
            else
            {
                phi[i*prime[j]]=(prime[j]-1)*phi[i];
            }
        }
    }
}
int main()
{
    g_p();int n;scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int x;scanf("%d",&x);
        printf("%d\n",phi[x]);
    }
    return 0;
}

2.运用欧拉函数定理

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
const int N=2e7+10;
int a[N];
inline int solve(int x)
{
	int d=x,dd=x;
	for(int i=2;i*i<=x;i++)
	{
		if(x%i==0)
		{
			d=d/i*(i-1);
			while(!(x%i))
			{
				x/=i;
			}
		}
	}
	int last=0;
	if(x>1)d=d/x*(x-1);a[dd]=d;
	return d;
}
int main()
{
	int n;scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int x;scanf("%d",&x);
		printf("%d\n",!a[x-1]?solve(x-1):a[x-1]);
	}
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值