1. 程式人生 > >演算法訓練 Torry的困惑(基本型)

演算法訓練 Torry的困惑(基本型)

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


樣例輸出




2

藍橋杯測試用例只有一個,就是8,都不超出long long型表示範圍,我也是醉了。

#include<stdio.h>  
#define MAX_N 100001 
int prime[MAX_N];//第i個素數    
bool is_prime[MAX_N + 1];    
  
//返回n以內素數的個數    
int sieve(int n) {    
    int p = 0;  
    for (int i = 0; i <= n; i++)    
        is_prime[i] = true;    
    is_prime[0] = is_prime[1] = false;    
    for (int i = 2; i <= n; i++) {    
        if (is_prime[i]){    
            prime[p++] = i;    
            for (int j = 2*i; j <= n; j += i)    
                is_prime[j] = false;    
        }    
    }    
    return p;//個數    
} 
int main(){  
	long long sum=1;
    int tot=sieve(20);
    for(int i=0;i<tot;i++){
    	sum=(sum*prime[i])%50000;
    }
    printf("%lld\n",sum);
   	return 0;
}  

(a*b*c*d)%n==(((a*b)%n)*c)%n*d)%n

試過前8位素數之積相等,這個等式應該成立。