問題描述
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);
}
}