欧拉函数的计算

9 篇文章 0 订阅
2 篇文章 0 订阅

NOIp要来了,最后Orz一把LRJ.
欧拉函数
欧拉函数,别的计算方法不会不多证明.直接上代码

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>

using namespace std ;

int euler_phi ( int x ) {
    int i, j, k, ans = x, lim = (int)sqrt(x+0.5) ;
    for ( i = 2 ; i <= lim ; i ++ ) 
        if ( x % i == 0 ) {
            ans = ans / i * ( i-1 ) ;
            while ( x%i==0 ) x /= i ;
        }
    if ( x > 1 ) ans = ans / x * (x-1) ; 
    //如果剩下的x也是原来x的因数
    return ans ;
}

int main() {
    int i, j, k, n, m ;
    while ( scanf ( "%d", &n ) != EOF ) 
        printf ( "Euler_phi(%d) = %d\n", n, euler_phi(n) ) ; 
    return 0 ; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值