蓝桥杯 Torry的困惑(基本型) C++算法训练 HERODING的蓝桥杯之路

资源限制
时间限制: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

解题思路:
最近的题目都比较友好呢,话不多说,开始解题。解题关键为一是求前n个质数,二是求乘积取50000的模。求前n个质数用while循环包含for循环的算法,while循环是控制质数为n个,for循环是为了找质数,注意找质数的过程有捷径,就是找到该数的平方根如果还没有找到因子就说明这个数是质数。详情见代码:

#include<bits/stdc++.h>

using namespace std;

int a[100000];//储存质数 

int main() {
	int n;
	cin >> n;
	int num = 0;
	int sum = 1;
	int i = 2;
	while(num < n){//判断质数的数量 
		bool flag = true;//判断是否为质数的标志 
		for(int j = 2; j <= sqrt(i*1.0); j ++) {
			if (i % j == 0) {
				flag = false;
				break;
			}
		}
		if (flag == true){
			a[num++] = i;
		}
		i ++;
	}
	for(i = 0; i < num; i ++) {
		sum = (sum * a[i]) % 50000;//取模 
	}
	cout << sum;
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/105989840