2020算法设计竞赛
https://ac.nowcoder.com/acm/contest/3003/G
链接:https://ac.nowcoder.com/acm/contest/3003/G
来源:牛客网
题目描述
牛可乐有七个整数 a,b,c,d,e,f,g\text{}a,b,c,d,e,f,ga,b,c,d,e,f,g 并且他猜想 ad+be+cf=ga^d+b^e+c^f=gad+be+cf=g。但 牛可乐无法进行如此庞大的计算。
请验证 牛可乐的猜想是否成立。
请验证 牛可乐的猜想是否成立。
输入描述:
第一行一个正整数 T,表示有 T 组数据。
每组数据输入一行七个整数 a,b,c,d,e,f,g\text{}a,b,c,d,e,f,ga,b,c,d,e,f,g 。
保证 1≤T≤10001\leq T \leq 10001≤T≤1000 , −109≤a,b,c,g≤109-10^9\leq a,b,c,g\leq 10^9−109≤a,b,c,g≤109 , 0≤d,e,f≤1090\leq d,e,f\leq 10^90≤d,e,f≤109 保证不会出现指数和底数同为 0 的情况。
输出描述:
每组数据输出一行,若猜想成立,输出 Yes ,否则输出 No。
考虑在模意义下进行计算,若 a^d+b^e+c^f\equiv g \pmod Mad+be+cf≡g(modM) ,则原式有概率成立,多选择一些模数以提高正确率。
1 #include<stdio.h> 2 #include<algorithm> 3 using namespace std; 4 typedef long long ll; 5 ll mod; 6 ll MOD[25]={999999613,999999667,999999677,999999733,999999739,999999751,999999757,999999761,999999797,999999883,999999893, 7 999999929,999999937,1000000007,1000000009,1000000021,1000000033,1000000087,1000000093,1000000097,1000000103,1000000123, 8 1000000181,1000000207,1000000223}; 9 ll fast(ll a,ll b) 10 { 11 ll ans=1; 12 while(b) 13 { 14 if(b&1) 15 ans=ans*a%mod; 16 a=a*a%mod; 17 b>>=1; 18 } 19 return ans%mod; 20 } 21 int main() 22 { 23 ll n,a,b,c,d,e,f,g; 24 ll T; 25 scanf("%lld",&T); 26 while(T--){ 27 scanf("%lld%lld%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e,&f,&g); 28 for(int i=0;i<25;i++) mod=MOD[i]; 29 ll ans=0; 30 ans=ans+fast(a%mod,d%mod); 31 ans=ans+fast(b%mod,e%mod); 32 ans=ans+fast(c%mod,f%mod); 33 ans%=mod; 34 ll t=g%mod; 35 if(ans==g)printf("Yes\n"); 36 else printf("No\n"); 37 } 38 return 0; 39 }