数论总结(快速幂+gcd+lcm+进制转换+素数筛选)

快速幂:

//fastPow
int fastPow(int x,int n){
    if(n==1) return x;
    int tmp=fastPow(x,n/2); //fenzi
    if(n%2==1) return tmp*tmp*x;
    else return tmp*tmp;
}

gcd 求最大公约数:

//gcd
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}

lcm求最小公倍数:

//lcm
int lcm(int a,int b){
    return a/gcd(a,b)*b;
}

素数筛选法:

//e_cheak
int vis[1000010];
int prime[100010];
int  e_cheak(int n){   //k为2-n素数的个数
    for(int i=0;i<=n;i++){
        vis[i]=0;
    }
    for(int i=2;i*i<=n;i++){
        if(!vis[i]){
            for(int j=i*i;j<=n;j+=i){
                vis[j]=1;
            }
        }
    }
    int k=0;
    for(int i=2;i<=n;i++){
        if(!vis[i])
            prime[k++]=i; //统计素数
    }
    return k;
}

进制转换:

//进制转化 x转化为y进制
string work(int x,int y){
    string str="";
    while(x){
        if(x%y>=10) str+=x%y+'A'-10;
        else str+=x%y+'0';
        x/=y;
    }
    reverse(str.begin(),str.end());
    return str;
}

猜你喜欢

转载自blog.csdn.net/m0_57006708/article/details/120456302
今日推荐