4个点MLE,其他点AC,麻烦各位大佬帮忙看看该怎么改?
查看原帖
4个点MLE,其他点AC,麻烦各位大佬帮忙看看该怎么改?
728458
lht20090314楼主2022/10/29 15:01

4个点MLE,其他点AC,我已经尽可能的缩小内存了,但还是爆了,麻烦各位大佬帮忙看看该怎么改?

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

void getPrime(int n)
{
	// 欧拉筛
    bool isPrime[n + 1];
    int prime[n / 6];
    int cnt = 0;
	memset(isPrime, 1, sizeof(isPrime));
	isPrime[1] = 0;
	for (int i = 2; i <= n; i++)
	{
		if (isPrime[i]) prime[++cnt] = i;
		for (int j = 1; j <= cnt && i * prime[j] <= n; j++)
		{
			isPrime[i * prime[j]] = 0;
			if (i % prime[j]) break;
		}
	}
	
	// 求质因数
	for (int i = 1; prime[i] * prime[i] <= n; i++)
	{
		bool flag = 1;
		for (int j = cnt; prime[j] * prime[j] >= n; j--)
		{
			if (prime[i] * prime[j] == n)
			{
				flag = 0;
				cout << max(prime[i], prime[j]) << endl;
				break;
			}
		}
		if (!flag) break;
	}
}

int main()
{
	int n = 0;
	cin >> n;
	getPrime(n);
	
	return 0;
}
2022/10/29 15:01
加载中...