题目大意
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
⭐⭐求 1 到 1000000007 中是否存在数乘 2021 除以 1000000007 余 999999999 的数。若有输出这个数,没有则输出0。
答案:17812964
解题思路
这题考验最基础的循环,直接从 11 到 1000000007 跑个循环,对每个数乘 2021 并且判断余数是否是999999999 即可。
代码
public class Main {
public static void main(String[] args) {
for (long i = 1; i <= 1000000007; i++) {
if (i * 2021 % 1000000007 == 999999999)
System.out.println(i);
}
}
}
❀❀特别注意i是long型不是int型,因为int型的最大值在2×109左右,而i×2021会大于这个数
优化
考试时遇到类似的题就可以收手了,直接提交答案做下一道,但学习中我们可以考虑一种更优化的方法。
x×2021%(109+7)=109-1
化简得:×2021=k(109+7)+109-1
化简得:x×2021+8=k*(109+7) //k*=k+1
x取值1 到 1000000007 ,所以k*取值1到2022
然后依次计算不同k*值下,x是否为整数就可以了
优化代码
public class Main {
public static void main(String[] args) {
for(long k=1;k<=2022;k++){
//余数为0说明x是整数
if((k*1000000007-8)%2021==0){
System.out.println((k*1000000007-8)/2021);
}
}
}
}