藍橋杯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);
    }

}



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