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 10001T1000 , −109≤a,b,c,g≤109-10^9\leq a,b,c,g\leq 10^9109a,b,c,g109 , 0≤d,e,f≤1090\leq d,e,f\leq 10^90d,e,f109 保证不会出现指数和底数同为 0 的情况。

输出描述:

每组数据输出一行,若猜想成立,输出 Yes ,否则输出 No。

考虑在模意义下进行计算,若 a^d+b^e+c^f\equiv g \pmod Mad+be+cfg(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 }

 

posted @ 2020-02-06 20:00  古比  阅读(289)  评论(0编辑  收藏  举报