zoukankan      html  css  js  c++  java
  • 用BigInteger求欧拉函数

    本来想搬砖,无奈没砖可搬,DIY 吧,反正也花不了多长事件

    BigInteger求欧拉函数:

    public static BigInteger bigIntegerEuler(BigInteger n) {
            BigInteger ret = new BigInteger(n.toString());
    
            BigInteger i = new BigInteger("2");
            BigInteger one = new BigInteger("1");
            BigInteger zero = new BigInteger("0");
            for (; i.multiply(i).compareTo(n) <= 0; i.add(one)) {
                if (n.mod(i).compareTo(zero) == 0) {
                    ret = ret.subtract(n.divide(i));
                    do {
                        n = n.divide(i);
                    }while (n.mod(i).compareTo(zero) == 0);
                }
            }
    
            if (n.compareTo(one) > 0) {
                ret = ret.subtract(ret.divide(n));
            }
    
            return ret;
        }

    参照代码:

    ll euler(ll n)  // ll 为 long long
    {  
        ll ret=n;  
        for(ll i=2;i*i<=n;i++){  
            if(n%i==0){  
                ret-=ret/i;  
                while(n%i==0){  
                    n/=i;  
                }  
            }  
        }  
        if(n>1)ret-=ret/n;  
        return ret;  
    }

    生活依然苦涩.........................

  • 相关阅读:
    状压DP
    题解:中位数
    题解:三只小猪
    二分图最大匹配
    AC自动机
    题解 P1137 【旅行计划】
    题解 P1280 【尼克的任务】
    DFT&IDFT学习笔记
    emacs配置
    莫比乌斯反演推导即μ函数的证明
  • 原文地址:https://www.cnblogs.com/hello-dummy/p/13355564.html
Copyright © 2011-2022 走看看