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很大,又可以表示为\sum_{ <br />   i=1}^{n}ai*10^{n-i}(其中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;
}