蓝桥杯2021年真题演练——1、相乘(JavaA组)

题目大意

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

⭐⭐求 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);
            }
        }
    }
}

下一题:2、直线(JavaA组)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值