[英]Project Euler #3 C++ Program Crash
問題指出:
13195的主要因子是5、7、13和29。
什么是600851475143的最大素數?
這是我在C ++中的嘗試
#include <bits/stdc++.h>
using namespace std;
void ProblemThree(long long int n) {
bool prime[n];
memset(prime, true, sizeof(prime));
for (int i = 2; i * i < n; i++) {
if (prime[i]) {
if (n % i == 0) {
printf("d", i);
for (int k = 2 * i; k <= n; k += i) {
prime[k] = false;
}
}
}
}
}
int main() {
ProblemThree(600851475143);
}
程序意外崩潰,編譯器未顯示任何錯誤。 為什么會這樣,我如何阻止它發生呢?
由於您嘗試分配的數組太大,導致崩潰。 由於只有一個數字可以測試,因此不需要存儲中間結果,因此可以繼續計算該數字的素因數分解,並采用最大因數。
您可以使用以下算法來計算O(1)空間的解決方案:
long long maxPrimeFactor(long long n)
{
long long maxPrimeFactor = 1;
while (n%2 == 0)
{
n = n/2;
maxPrimeFactor = 2;
}
// n must be odd at this point. So we can skip
// one element (Note i = i +2)
for (int i = 3; i <= sqrt(n); i = i+2)
{
while (n%i == 0)
{
maxPrimeFactor = max(maxPrimeFactor, i);
n = n/i;
}
}
if (n > 2){
maxPrimeFactor = max(maxPrimeFactor, n);
}
return maxPrimeFactor;
}
注意:代碼尚未經過測試,但是它可以給出想法,並且仍然可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.