算法訓練 Torry的困惑(基本型)
時間限制:1.0s 內存限制:512.0MB
問題描述
Torry從小喜愛數學。一天,老師告訴他,像2、3、5、7……這樣的數叫做質數。Torry突然想到一個問題,前10、100、1000、10000……個質數的乘積是多少呢?他把這個問題告訴老師。老師愣住了,一時回答不出來。於是Torry求助於會編程的你,請你算出前n個質數的乘積。不過,考慮到你才接觸編程不久,Torry只要你算出這個數模上50000的值。
輸入格式
僅包含一個正整數n,其中n<=100000。
輸出格式
輸出一行,即前n個質數的乘積模50000的值。
樣例輸入
1
樣例輸出
2
解題思路
因為不知道第100000個質數是多少,所以可以先用較大的數n當結束,進行打表求0--n直接的質數,然後從0開始判斷如果是質數就相乘並j++,可以先輸入100000來判斷到哪個數就截止了,然後再修改程序的n。
注意answer需要用到64位int型。
這題還考察了同余定理。
C代碼
#include
#include
int a[11000000],b[110000];
int main()
{
int n;
int i,j,k;
__int64 answer;
scanf("%d",&n);
memset(a,0,sizeof(a));
a[0]=a[1]=1;
for(i=0;i<10000000;i++)
{
if(a[i])
continue;
for(j=i+i;j<10000000;j+=i)
a[j]=1;
}
answer=1;
for(i=0,j=0;i<10000000&&j
JAVA代碼package torry的困惑;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
int[] a=new int[1100000];
int[] b=new int[110000];
int n=input.nextInt();
int i,j,k;
long answer;
a[0]=a[1]=1;
for(i=0;i<1000000;i++)
{
if(a[i]==1)
continue;
for(j=i+i;j<1000000;j+=i)
a[j]=1;
}
answer=1;
for(i=0,j=0;i<1000000&&j