大数取模

来源:互联网 发布:淘宝天猫类目采集器 编辑:程序博客网 时间:2024/05/24 16:16
a+b)%n=(a%n+b%n)%n

(a-b)%n=(a%n-b%n+n)%n

为什么要加n,由于a%n可能小于b%n,所以加n保证为正整数

a*b%n=(a%n*b%n)%n

这些事大整数取模的基础

int mod(char str[],int num)
{
    int number[100];
    for(int i=0;i<strlen(str);i++)
     number[i]=str[i]-'0';
    int remainder=0;
    for(int i=0;i<strlen(str);i++)
    {
        remainder=((long long)remainder*10+number[i])%num;
    }
    return remainder;
}

之所以强制转换为long long ,是为了防止乘法过程中溢出

幂取模

int pow_mod(int a,int n,int m)
{
    if(n==1) return a;
    else 
    {
        int x=pow_mod(int a,int n/2,int m)
        long long x=(long long)x*x%m;
        if(n%2==1) x=(long long)x*a%m;
        return (int)x;
     }
}
0 0
原创粉丝点击