题解 UVA10299 【Relatives】
题意
有多组数据,每组一个整数
欧拉函数 的定义
——《算法竞赛进阶指南》
在算数基本定理中,则:
根据欧拉函数的计算式,我们只需要分解质因数,就可求出欧拉函数。
更多关于欧拉函数的知识。
详见代码:
//the code is from chenjh
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL phi(LL n){//分解质因数,求单个欧拉函数值
LL ans=n;
LL sqn=sqrt(n);
for(int i=2;i<=sqn;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;
}
int main(){
LL n;
while(scanf("%lld",&n) && n)
printf("%lld\n",phi(n));
return 0;
}
拓展一下,求 中每个数的欧拉函数值:
void euler(int n){
for(int i=2;i<=n;i++) phi[i]=i;
for(int i=2;i<=n;i++)
if(phi[i]==i)
for(int j=i;j<=n;j+=i)
phi[j]=phi[j]/i*(i-1);
}
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】