算法检查两个变量“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)。 这就是输出 –