欧拉函数与扩展欧几里得

我是真没看懂……把算法留在这把。
欧拉函数

int euler(int n){ //返回euler(n)
    int res=n,a=n;
    for(int i=2;i*i<=a;i++){
        if(a%i==0){
            res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出
            while(a%i==0) a/=i;
        }
    }
    if(a>1) res=res/a*(a-1);
    return res;
}

扩展欧几里得

int exgcd(int a,int b,int &x,int &y){
    if(b==0){
        x=1;
        y=0;
        return a;
    }
    int r=exgcd(b,a%b,x,y);
    int t=x;
    x=y;
    y=t-a/b*y;
    return r;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/PancrasBohemian/article/details/79981203
个人分类: 做题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭