题解 UVA10299 【Relatives】

题意

有多组数据,每组一个整数 n(n109),求出 φ(n),最后以 0 结束。

欧拉函数 φ(n) 的定义

1n 中与 N 互质数的个数被称为欧拉函数,记为 φ(n)

——《算法竞赛进阶指南》

在算数基本定理中,则:

φ(n)=n×p11p1×p21p2×...×pm1pm=n×质数pn(11p)

根据欧拉函数的计算式,我们只需要分解质因数,就可求出欧拉函数。

更多关于欧拉函数的知识

详见代码:

//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;
}

拓展一下,求 2n 中每个数的欧拉函数值:

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);
}
posted @   Chen_Jinhui  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

一言

十代目的意志就是我们的意志!
——家庭教师
点击右上角即可分享
微信分享提示