蓝桥杯Torry的困惑(提高型)JAVA代码(利用求平方根判断)

问题描述

    Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
输入格式

    仅包含一个正整数n,其中n<=100000。
输出格式

    输出一行,即前n个质数的乘积模50000的值。
样例输入

    1
样例输出

    2
思路:①模就是对50000取余;
      ②判断质数的快速方法:只需判断到它的开方根就行了;
为什么要判断平方根?
    质数:因子只有1和本身,如果一个数a不是质数,设a的平方根为b,那么它的因子x,y,z…必然有大于b和小于b的数。所以只需要判断3~b之间是否有能被a整除的数。若a是质数,3–b之间就没有能被a整除的数。

代码:转载:下雨了_简


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner sca = new Scanner(System.in);
        int x = sca.nextInt();
        boolean boo;
        long sum = 1;
        int count = 0; //质数个数
        long zhishu = 2; //质数开始的数
        while (true) {
            boo = true;
            if (zhishu != 2 && zhishu % 2 == 0) { //先将2及2的倍数踢出
                boo = false;
            }
            if (boo) {
                for (int i = 3; i*i <= zhishu; i += 2) {//判断到平方根处就不判了,从3开始判。
                    if (zhishu % i == 0) {
                        boo = false;
                        break;
                    }
                }
            }
            if (boo) {
                count++;
                sum = sum * (zhishu%50000) % 50000;
                if (count >= x) {
                    break;
                }
            }
            zhishu++;
        }
        System.out.println(sum);
    }

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章