欧拉函数 (10 分)

在数论中,对正整数n,欧拉函数ϕ(n)是小于或等于n的正整数中与n 互质的数的数目。此函数以其首名研究者欧拉命名,它又称为φ函数(由高斯所命名)

输入格式:

一个正整数n。

输出格式:

一个数,表示欧拉函数ϕ(n)。

输入样例:

10

输出样例:

4

注释:表示10以内有4个数与10 互质,它们是:1,3,7,9

ϕ(n)=ni=1∏r​(1−1/pi​), 其中,其中p1​,p2​……pr​为n的所有质因数


#include<bits/stdc++.h>
using namespace std;
int sushu(int n) {
    for (int i = 2;i <= (int)sqrt(n);i++) {
        if (n % i == 0) return 0;
    }
    return 1;
}
int main() {
    int a;
    cin >> a;
    if (sushu(a)) {
        cout << a - 1;
        return 0;
    }
    else {
        int ans = a;
        for (int i = 2;i <= a;i++) {
            if (sushu(i)) {
                if (a % i == 0) ans = ans * (i - 1) / i;
                while (a % i == 0) a /= i;
            }
        }
        cout << ans;
    }
}

优化算法的心路历程:

0,素数判断 

 i<=(int)sqrt(n)    可以

1,通过这一步,把a变小。

到这里我已经觉得很够了。竟然还有个点超时!!

2.

 我还尝试把这里i++ 变成i=i+2;  i从3开始,i=2的时候单拎出来,至少内层砍了一半了吧,这总够了吧!

还超时我麻了!

3.网上找找了,原来是 先判断一下这数是不是素数若是直接cout<<a-1; return 0 ; !!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值