1. 程式人生 > >[藍橋杯]ALGO-51.Torry的困惑(基本型)

[藍橋杯]ALGO-51.Torry的困惑(基本型)

題目描述:

問題描述
  Torry從小喜愛數學。一天,老師告訴他,像2、357……這樣的數叫做質數。Torry突然想到一個問題,前10、100100010000……個質數的乘積是多少呢?他把這個問題告訴老師。老師愣住了,一時回答不出來。於是Torry求助於會程式設計的你,請你算出前n個質數的乘積。不過,考慮到你才接觸程式設計不久,Torry只要你算出這個數模上50000的值。
輸入格式
  僅包含一個正整數n,其中n<=100000。
輸出格式
  輸出一行,即前n個質數的乘積模50000的值。
樣例輸入
1

樣例輸出


2

 

先上程式碼:

 1 #include <stdio.h>
 2
#include <string.h> 3 #define LEN 100000 4 using namespace std; 5 6 int main(void) 7 { 8 int n,res=1; 9 int num[LEN+1]; 10 memset(num,0,sizeof(num)); 11 12 scanf("%d",&n); 13 14 for (int i=2 ; i<LEN ; i ++) 15 { 16 if (num[i] == 0) 17 for
(int j=i ; i*j<LEN ; j++) 18 num[i*j] = 1; //非素數的置為1 19 20 if (num[i] == 0) 21 { 22 n --; 23 res = (res*i)%50000; 24 if (n==0) 25 break; 26 } 27 } 28 29
printf("%d",res); 30 return 0; 31 }
C解法

 

解題思路:

1.將素數的值置為0,非素數的值置為1

2.每檢測到一個素數即將其累乘取模,n減1