博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线性筛欧拉函数 【模板】
阅读量:2153 次
发布时间:2019-04-30

本文共 1430 字,大约阅读时间需要 4 分钟。

线性筛欧拉函数

欧拉函数

欧拉函数的定义:

gcd ⁡ ( a , b ) = 1 \gcd(a,b)=1 gcd(a,b)=1,则 a a a b b b互质
在自然数1到n中与n互质的个数称为欧拉函数,记作 φ ( n ) φ(n) φ(n)
下文皆以 p p p 表示质数 (prime)


性质1: φ ( p ) = p − 1 φ(p)=p-1 φ(p)=p1

证明:显然,质数的因数只有1和它本身,且1与任何数互质,所以除了它本身,其它都互质。

性质2: φ ( p k ) = p k − p k − 1 φ(p^k)=p^k-p^{k-1} φ(pk)=pkpk1

证明:与性质1类似, p k p^k pk即总数减去它的因数数量 p k − 1 p^{k-1} pk1,由于 p k p^k pk

根据容斥定理可以得到 φ ( n ) = n ∗ ∏ ( 1 − p ) / p φ(n)=n*∏(1-p)/p φ(n)=n(1p)/p
由于φ是积性函数,所以 φ ( a b ) = φ ( a ) ∗ φ ( b ) ( gcd ⁡ ( a , b ) = 1 ) φ(ab)=φ(a)*φ(b)(\gcd(a,b)=1) φ(ab)=φ(a)φ(b)(gcd(a,b)=1)
∑ [ d ∣ n ] φ ( d ) = n , ∑ [ g c d ( n , i ) = = 1 ] i = n ∗ φ ( n ) / 2 ∑[d|n]φ(d)=n,∑[gcd(n,i)==1]i=n*φ(n)/2 [dn]φ(d)=n[gcd(n,i)==1]i=nφ(n)/2
根据以上性质,可以用各种筛法解决

#include
#include
#define Max 100000001using namespace std;int phi[Max],n,p[Max],pn; bool f[Max];void Phi()//φ(欧拉函数){
phi[1]=1; for(int i=2;i<=n;i++) {
if(!f[i]) {
p[++pn]=i; phi[i]=i-1;//根据性质,i为质数, φ(i)=i-1 } for(int j=1;j<=pn&&i*p[j]<=n;j++) {
f[i*p[j]]=1; if(i%p[j]==0) {
//根据通式,φ(i*p[j]) = (i*p[j])*∏(1-p)/p = (i*∏(1-p)/p)*p[j] = φ(i)*p[j] phi[i*p[j]]=phi[i]*p[j]; break; } else //否则,i和 p[j]互质,因为 p[j]是质数 phi[i*p[j]]=phi[i]*(p[j]-1);//由积性函数性质得 φ(i*p[j]) = φ(i)*φ(p[j]) = φ(i)*(p[j]-1) } }}int main(){
printf("求1~n的欧拉函数\n输入n\n"); scanf("%d",&n); Phi(); for(int i=1;i<=n;i++) {
printf("1~%d中与%d互质的个数:%d\n",i,i,phi[i]); }}

转载地址:http://shpwb.baihongyu.com/

你可能感兴趣的文章
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>
TP5.1模板布局中遇到的坑,配置完不生效解决办法
查看>>
PHPstudy中遇到的坑No input file specified,以及传到linux环境下遇到的坑,模板文件不存在
查看>>
TP5.1事务操作和TP5事务回滚操作多表
查看>>
composer install或composer update 或 composer require phpoffice/phpexcel 失败解决办法
查看>>
TP5.1项目从windows的Apache服务迁移到linux的Nginx服务需要注意几点。
查看>>
win10安装软件 打开时报错 找不到 msvcp120.dll
查看>>
PHPunit+Xdebug代码覆盖率以及遇到的问题汇总
查看>>
PHPUnit安装及使用
查看>>
PHP项目用xhprof性能分析(安装及应用实例)
查看>>
composer安装YII
查看>>
Sublime text3快捷键演示
查看>>
sublime text3 快捷键修改
查看>>
关于PHP几点建议
查看>>