月夜飒飒动干戈 --- DYOI系列题解
简略题意:求出所有的
由于
快速幂如下:
inline ll qpow(ll a, ll b, ll mod) {
ll ret = 1;
while(b > 0) {
if(b & 1) {
ret *= a, ret %= mod;
}
a *= a, a %= mod;
b >>= 1;
}
return ret;
}
枚举部分如下
for(ll i = p; i <= p + 9; ++i) {
if(qpow(k, i, 10) == x) {
ans[tot++] = i;
}
}
最后的统计与存储过于简单不放代码了。
总代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
ll ans[13];
inline ll qpow(ll a, ll b, ll mod) {
ll ret = 1;
while(b > 0) {
if(b & 1) {
ret *= a, ret %= mod;
}
a *= a, a %= mod;
b >>= 1;
}
return ret;
}
int main() {
ll T;
cin >> T;
while(T--) {
ll k, p, x;
cin >> k >> p >> x;
ll tot = 0;
k %= 10;
for(ll i = p; i <= p + 9; ++i) {
if(qpow(k, i, 10) == x) {
ans[tot++] = i;
}
}
if(tot == 0) {
cout << "No Ans" << endl;
} else {
cout << tot << endl;
for(ll i = 0; i < tot; ++i) {
cout << ans[i] << ' ';
}
cout << endl;
}
}
return 0;
}