[编程题] 模 时间限制:1秒 空间限制:32768K 给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c。 输入描述: 第一行一个整数T(T <= 5,000)。 接下来T行,每行四个正整数a,b,c,k(1 ≤ a ≤ 10^18; 2 ≤ k ≤ 10^18; 0 ≤ c < b ≤ 10^18)表示一个询问,所有输入都是十进制的。 输出描述: 对于每组数据输出一行,Yes表示存在,No表示不存在。 输入例子: 2 3 9 5 10 7 3 1 10 输出例子: No Yes
这其实是一道数学题,核心代码为
下面先上正确代码,证明过程暂时不会,还望各位路过大佬不吝赐教。
1 #include <iostream>
2 using namespace std;
3
4 //返回x和y的最大公约数
5 long long gcd(long long x, long long y)
6 {
7 long long z = y;
8 while(x%y!=0)
9 {
10 z = x%y;
11 x = y;
12 y = z;
13 }
14 return z;
15 }
16
17 int main()
18 {
19 int T;
20 cin>>T;
21 while(T--)
22 {
23 long long a,b,c,k;
24 cin>>a>>b>>c>>k;
25 if(c%gcd(b,gcd(a,k-1))==0)
26 cout<<"Yes"<<endl;
27 else
28 cout<<"No"<<endl;
29 }
30 return 0;
31 }
这题挺有意思。。。证明过程会及时补充。
特意备注:扩展欧几里得