[藍橋杯]ALGO-51.Torry的困惑(基本型)
阿新 • • 發佈:2018-12-21
題目描述:
問題描述 Torry從小喜愛數學。一天,老師告訴他,像2、3、5、7……這樣的數叫做質數。Torry突然想到一個問題,前10、100、1000、10000……個質數的乘積是多少呢?他把這個問題告訴老師。老師愣住了,一時回答不出來。於是Torry求助於會程式設計的你,請你算出前n個質數的乘積。不過,考慮到你才接觸程式設計不久,Torry只要你算出這個數模上50000的值。 輸入格式 僅包含一個正整數n,其中n<=100000。 輸出格式 輸出一行,即前n個質數的乘積模50000的值。 樣例輸入 1 樣例輸出 2
先上程式碼:
1 #include <stdio.h> 2C解法#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 29printf("%d",res); 30 return 0; 31 }
解題思路:
1.將素數的值置為0,非素數的值置為1
2.每檢測到一個素數即將其累乘取模,n減1