題目背景
原題連結點選這裡
第一眼看,題意很明確,思路就是求b的逆元,
(不會逆元的,可以看我這一篇部落格點選這裡
但是一看資料範圍\(10^{10001}\)
一開始還在想也不要打高精,仔細想想不用
因為模運算具有加減乘性質,加減乘中間任何數取模都不會影響模的結果
所以我們把一個數用字串讀入,然後\(x=(x*10+s[i]-'0')%p\)
對a取模得到的結果不影響,至於為什麼對b取模得到的結果也不影響
還是去看我那篇部落格裡面有講點選這裡
然後就是遞迴求單個逆元
程式碼實現
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll p,ans,t,a,b;
ll getinv(int x){
return x==1?1:1ll*(p-(p/x))*getinv(p%x)%p;
}
ll exch(string s){
ll x=0;
int len=s.size();
for(int i=0;i<s.size();i++){
x=x*10+s[i]-'0';
x%=p;
}
return x;
}
int main(){
p=19260817;
string sa,sb;
cin.sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>sa>>sb;
a=exch(sa);
b=exch(sb);
ans=a*getinv(b)%p ;
cout<<ans;
}