10^N+7 题解
题目大意
有三个非负整数 $ x,y,z $,找到符合以下条件的最小非负整数 \(n\);
- $ n\ {\rm\ mod}\ 10^1+7\ =\ x $
- $ n\ {\rm\ mod}\ 10^2+7\ =\ y $
- $ n\ {\rm\ mod}\ 10^9+7\ =\ z $
解题思路
如果模数很小,可以无限循环,每次 \(i+1\),判断是否同时满足这三个条件。
但是模数很大,时间复杂度很高,很容易超时,所以要优化一下:
- 首先,\(i\) 的初始值为 \(z\),保证 \(i\ {\rm\ mod}\ 10^9+7\ =\ z\)。
- 接下来,因为 $ x,y,z $ 是非负的,所以只有 \(10^9+7\) 的倍数和 \(0\) 可能是满足条件的数,所以可以每次加 \(10^9+7\),这样提高了查找的效率。
- 查找过程中判断是否满足另外两个条件,是就输出 \(i\)。
代码
#include <bits/stdc++.h>
using namespace std;
const long long Mod=1e9+7;
long long x,y,z;
int main() {
cin>>x>>y>>z;
long long i=z;
while(true) {
if (i%17==x&&i%107==y) {
cout<<i;
break;
}
i+=Mod;
}
return 0;
}