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;
}

AC记录

posted @ 2022-12-25 14:50  Ggsddu_zzy  阅读(36)  评论(0编辑  收藏  举报