1. 程式人生 > 其它 >演算法學習筆記(1)取模運算(取餘)

演算法學習筆記(1)取模運算(取餘)

轉自大整數取模--思路及實現 - I'm coding - 部落格園 (cnblogs.com)

1.取模的常用公式:

一 . (a+b)mod n = ((a mod n)+(b mod n) mod n

二 . (a-b)mod n = ((a mod n)-(b mod n)+n) mod n

三 . ab mod n = (a mod n)(b mod n) mod n

比如,求兩個整數的乘積的模,因為乘積可能超過INT_MAX, 故應該用long long儲存中間值。

int mul_mod(int a, int b, int n)
{
    a %= n;
    b %= n;
    
return (int) ((long long)a*b % n); }

2.應用:大整數取模

思路:首先,將大整數分解成這種形式:1234 = ((1*10+2)*10+3)*10+4,這個地方原來是模擬除法的過程,例如

 

 

#include <cstdio>
#include <cstring>
char a[10000 + 10];

int main()
{
    int b, len;
    while(~scanf("%s%d", a, &b)){
        len = strlen(a);
        int ans = 0;
        
for(int i = 0; i < len; i++) ans = (int)(((long long) ans*10 + a[i] - '0') % b); //就在這一步模擬除法 printf("%d\n", ans); } return 0; }