算法檢查兩個變量「a」和「x」是否是素數。如果是,它只是宣佈這些是素數。需要50個,當涉及到第6個位置程序顯示錯誤:堆棧溢出(參數:0x00000001,0x00442FF8)
堆棧溢出(參數:0x00000001,0x00442FF8)。
#include "stdafx.h"
#include <iostream>
using namespace std;
int CheckIfPrime(long int n)
{
if (n<2) return 0;
for (int i = 2; i*i <= n; i++)
if (n%i == 0) return 0;
return 1;
}
int pow(int ap, int nt)
{
if (nt == 0)
return 1;
else
return ap *= pow(ap, --nt);
}
void CountA(int *aValue, int x)
{
*aValue = (pow(2, x) - 1);
}
int main()
{
int x = 1;
int a = 0;
int *aPointer = &a;
for (int i = 0; i <= 50;)
{
x++;
if (CheckIfPrime(x))
{
CountA(aPointer, x);
if (CheckIfPrime(a))
{
cout << i << ". X = " << x << " a = " << a << " are prime " << endl;
i++;
}
}
else
{
cout << "";
}
}
getchar();
return 0;
}
我花了一些時間來實現:通過「堆棧溢出」你的意思是這個論壇,不是故障。如果你向'CountA'傳遞了一個負數'x',但你沒有,你的代碼會有堆棧溢出。除此之外,你的代碼是非常錯誤的,沒有比從頭開始重新設計更少的變化,可以使它工作在'x' – JSF
的微小值上。這段代碼的要點是檢查x變量是否爲素數:如果爲真,那麼它計數a = 2^x -1。在算法之後檢查'a'是否爲素數。 –
ConsoleApplication3.exe中的0x00D02509引發的異常:0xC00000FD:堆棧溢出(參數:0x00000001,0x002D2F5C)。 ConsoleApplication3.exe中的0x00D02509未處理的異常:0xC00000FD:堆棧溢出(參數:0x00000001,0x002D2F5C)。 這就是輸出 –