51nod 1119 除法取模

2021-07-09 16:44:28 字數 1167 閱讀 3410

1119 機械人走方格 v2

基準時間限制:1 秒 空間限制:131072 kb 分值: 10 

難度:2級演算法題

m * n的方格,乙個機械人從左上走到右下,只能向右或向下走。有多少種不同的走法?由於方法數量可能很大,只需要輸出mod 10^9 + 7的結果。

input

第1行,2個數m,n,中間用空格隔開。(2 <= m,n <= 1000000)
output

輸出走法的數量 mod 10^9 + 7。
input示例

2 3
output示例

3
思路:就是乙個數學組合問題。。。( c(n-1+m-1,n-1) )

一直不知道除法取模怎麼算,今天學習了一下,用到了費馬小定理。

帶模的除法:求 a / b = x (mod m)

只要 m 是乙個素數,而且 b 不是 m 的倍數,就可以用乙個逆元整數 b』,通過 a / b = a * b' (mod m),來以乘換除。

費馬小定理說,對於素數 m 任意不是 m 的倍數的 b,都有:b ^ (m-1) = 1 (mod m)

於是可以拆成:b * b ^ (m-2) = 1 (mod m)

於是:a / b = a / b * (b * b ^ (m-2)) = a * (b ^ (m-2)) (mod m)

也就是說我們要求的逆元就是 b ^ (m-2) (mod m)! ——(用快速冪可以求出)

#include #include #include #include #include #include #include #include using namespace std;  

const int mod = 1000000007;  

const int maxn = 1000000;  

long long f[maxn * 2 + 10];  

int n,m;  

void init()  

long long pow(long long n,long long m)  

return ans;  

}  long long computer()  

int main()  

return 0;  

}

51nod 1119 機械人走方格 V2

乙個機械人從左上走到右下,每次只能往下或往右走,問最後到達右下時能有多少種方法。1.如果n,m小的話可以遞迴求解,但是這裡n,m太大,陣列開不了。我們取乙個小一點的n,m。用遞推填表,可以發現表是乙個楊輝三角。楊輝三角在第n行第m列的值為c n 1,m 1 可以得到 n,m 位置處應該填上c n 1...

51nod 1119 機械人走方格V2

m n的方格,乙個機械人從左上走到右下,只能向右或向下走。有多少種不同的走法?由於方法數量可能很大,只需要輸出mod 10 9 7的結果。收起輸入 第1行,2個數m,n,中間用空格隔開。2 m,n 1000000 輸出輸出走法的數量 mod 10 9 7。輸入樣例 2 3輸出樣例 3 題目傳送門 i...

51nod1119 機械人走方格 V2

終於學到了求組合數的正確姿勢 c n m 2,m 1 include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s i t i de...