題目ios
\(c\)等於一個分數,求他的餘數,分數是不能直接模的,除以一個數等於乘上這個數的逆元。git
因此此題就是求一個逆元,費馬小定理求逆元是很方便的,一個快速冪就解決了。spa
還要注意由於\(a,b\)的值都很大,在讀入的時候須要取模code
可是這樣只能拿到\(90\)分,最後一個點過不了,什麼緣由?咱們尚未判斷這個\(b\)是否有逆元,判斷這個數是否有逆元的方法,也不難,只需判斷\(gcd(b, mod)\)是否爲\(1\)便可。get
話說我本身寫過博客的我都忘了,作題的時候回來看的\(233\)博客
貌似博客裏寫的東西還出鍋了,又被\(lfd\)一頓嘲笑。\(233\)(卑微.jpgit
他講的數論我當時確實是聽得很明白啊,但是後來又忘了......io
#include <cstdio> #include <iostream> using namespace std; const int N = 19260817; long long a, b, ans; long long read() { long long s = 0, w = 1; char ch = getchar(); while(!isdigit(ch)) {if(ch == '-') w = -1; ch = getchar();} while(isdigit(ch)) s = s * 10 + ch - '0', s %= N, ch = getchar(); return s * w; } long long power(long long x, long long y) { long long sum = 1; while(y) { if(y & 1) sum = (sum * x) % N; x = (x * x) % N; y >>= 1; } return sum; } long long gcd(long long x, long long y) { return y == 0 ? x : gcd(y, x % y); } int main() { a = read(), b = read(); if(gcd(b, N) != 1) printf("Angry!\n"); else cout << (a * power(b, N - 2)) % N << endl; return 0; }
謝謝收看,祝身體健康!class