AT_arc172_e
zhongpeilin · · 题解
题目大意:
给你一个
解题思路:
这个
我们举几个例子,会发现所有例子的
反证:假设存在两个数
那么我们把他们分解质因数,
然后
那么他们的每一项都不是 2 或 5,所以他们两个模
感性理解一下吧QWQ。
有了上面的结论,就可以发现,
有了这个条件后,我们可以将问题弱化一下,再去一步一步解决。
我们可以先找到一个
所以流程就是确定了 100 的答案之后,确定 1000 的答案,一直到
CODE:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int qp(int a, int b, int mod){
int ans = 1;
while(b){
if(b % 2) ans = ans * a % mod;
a = a * a % mod;
b /= 2;
}
return ans;
}
int t, n, f[105], a[10];
void solve(){
cin >> n;
a[2] = f[n % 100];
int pw = 100;
for(int i = 3; i <= 9; i++){
for(int j = 0; j <= 9; j++){
a[i] = a[i - 1] + pw * j;
if(qp(a[i], a[i], pw * 10) == n % (pw * 10)) break;
}
pw *= 10;
}
cout << a[9] << endl;
}
signed main(){
ios::sync_with_stdio(false);
cin >> t;
for(int i = 1; i < 100; i++) if(i % 2 && i % 5) f[qp(i, i, 100)] = i;
while(t--) solve();
return 0;
}