https://vjudge.net/problem/387912/origin
F(x,m)F(x,m) 代表一個全是由數字xx組成的mm位數字。請計算,以下式子是否成立:
F(x,m) mod k ≡ cF(x,m) mod k ≡ c
Input
第一行一個整數TT,表示TT組數據。
每組測試數據佔一行,包含四個數字x,m,k,cx,m,k,c
1≤x≤91≤x≤9
1≤m≤10101≤m≤1010
0≤c<k≤10,0000≤c<k≤10,000
Output
對於每組數據,輸出兩行:
第一行輸出:"Case #i:"。ii代表第ii組測試數據。
第二行輸出“Yes” 或者 “No”,代表四個數字,是否能夠滿足題目中給的公式。
Sample Input
3
1 3 5 2
1 3 5 1
3 5 99 69
Sample Output
Case #1:
No
Case #2:
Yes
Case #3:
Yes
學到了學到了
a % b == c 這三個數同時乘以一個正整數,式子依然成立
還有
m個x == x * m個1 = x * ( 1 + 10 + 100 + 10^m ) 等比數列求和
#include<bits/stdc++.h>
using namespace std;
using lon = long long;
lon quick(lon a,lon b,lon c)//快速冪取模
{
lon ans=1;
a%=c;
while(b)
{
if(b&1)
ans = ans * a %c;
a = a * a % c;
b >>= 1;
}
return ans%c;
}
lon slove(lon x, lon m, lon k)
{
// cout << (quick(10, m, k) - 1) << endl;
return ((quick(10, m, k*9) - 1) * x) % (k * 9);
}
int main()
{
int T;
cin >> T;
for(int tt = 1; tt <= T; tt++)
{
lon x, m, k, c;
cin >> x >> m >> k >> c;
printf("Case #%d:\n", tt);
//cout << slove(x, m, k) << endl;
cout << ((slove(x, m, k) == c * 9) ? "Yes" : "No") << endl;
}
return 0;
}