欧拉函数证明与代码实现
欧拉函数
- 定义
对于正整数n小于等于n的数中与n互质的数的个数记为 ,即为欧拉函数 - 欧拉公式
由算数基本定理任意一个正整数都可以写作n=
那么 - 数学证明
首先 是一个积性函数
即 这个的证明这里不作叙述可看这个链接积性证明
然后从1到一个数 一共有 个数其中与其不互质的有 一共有 个数,所以与其互质的一共有
所以有:
- 代码实现
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int a;
scanf("%d",&a);
int res=a;
for(int i=2;i<=a/i;i++)
{
if(a%i==0)
{
res=res/i*(i-1);//注意先除再乘防止爆int
}
while(a%i==0)
{
a/=i;
}
}
if(a>1)
{
res=res/a*(a-1);
}
printf("%d\n",res);
}
return 0;
}
- 代码细节
注意res=res/i*(i-1)这里要先除再乘防止爆int 可能会有疑问我们推导的公式中 是一个小数但是c++里/是向下取整的,那么这里会不会有问题呢?其实是完全没问题的 我们可以看到只有当a%i==0时我们才会进行res的操作并且每次循环中a至少都和res除i除的一样多也就是说只要a中有约数 i 那么res中也一定有 i 一定不会出现小数。
Written with StackEdit中文版.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具