蓝桥杯 1485: [蓝桥杯][算法提高VIP]Torry的困惑(提高型) 需要二刷 *存在取模和溢出问题

基本思想:

找素数,再取模;

关键点:

存在一个待解决的问题,后续进行总结;

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector> 
#include<string>
#include<math.h>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int maxn = 100010;
bool arr[maxn];

void init(int n) {
	fill(arr, arr + maxn, false);
	ll cnt = 1;
	for (ll i = 2; i < maxn; i++) {
		if (!arr[i]) {
			for (int j = i + i; j < maxn; j += i) {
				arr[j] = true;
			}
			
		}
	}
	for (int i = 2; i < maxn&&n!=0; i++) {
		if (!arr[i]) {
			n--;
			i = i % 50000;
			cnt = cnt % 50000;
			cnt = i * cnt;
			cnt = cnt % 50000;
			//cout << i << endl;
		}
	}
	cout << cnt;
}

bool is_prime(int n) {
	int sqr = int(sqrt(n));
	for (int i = 2; i <= sqr; i++) {
		if (n%i == 0)
			return 0;
	}
	return 1;
}

int main(){
	int n;
	cin >> n;
	if (n == 0) {
		cout << 0;
		return 0;
	}
	ll num = 2;
	ll cnt = 1;
	while (n != 0) {
		if (is_prime(num)) {
			cnt *= num % 50000;
			cnt %= 50000;
			n--;
		}
		num++;
	}
	cout << cnt<<endl;
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/songlinxuan/p/12288279.html