D题
首先有以下性质
1. (a+b)%mod 等价于 a%mod + b%mod
2. a*b%mod 等价于 a%mod*b%mod (仅当a*b没有溢出时)
该题求解gcd(a,b) a是大数
根据辗转相除法
gcd(a,b)=gcd(b,a%b)
因此我们可以先求a%b把a限制在1e9的范围内,然后做gcd
因为a很大,又可以表示为
(其中n为字符串的长度,ai为第i个字符)
又由性质1和2,我们就可以对每个ai求mod,同时通过乘和累加求出
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 0x3f3f3f3f3f3f3f3f
string str;
int b;
void solve(){
cin>>str;
cin>>b;
int res=0;
for(int i=0;i<str.size();i++){
int t=str[i]-'0';
res*=10;
res+=t;
res%=b;
}
cout<<gcd(res,b)<<endl;
}
signed main(){
int t=1;ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
//cin>>t;
while(t--)solve();
return 0;
}

京公网安备 11010502036488号