0

我的任务是从用户那里获取无尽的输入(ctrl-d 终止),如果输入的数字是质数,则返回响应。对此的扭曲是,我必须制作一个涵盖数字输入的素数列表(如果输入数字为 6,则列表必须包含 2,3,5 和 7),线性搜索列表,如果输入的数字在所述列表中,则返回 true。它也必须在一个类中。

这是我的 Isprime 函数。

bool isprime::Isprime(int N){
  int i,primenum,max=1;
  int prime[max];
  prime[0]=2;
  for(primenum=3;prime[max-1]<N;primenum++){
    for(i=2;i<primenum;i++){
      if(primenum%i!=0){
        max++;
        prime[max-1]=primenum;
      }
  }
  for(int j=0;j<max;j++){
    if(N==prime[j])
      return true;
  }
  return false;
}

当我运行程序时,返回所需输出的唯一数字是 2(我最初放入列表中的那个。我在这里做错了什么?感谢您提前输入。

编辑1:当用户输入数字时,如果Isprime函数返回true,则输出一个简单的cout << N << "is a prime number"。这就是我所说的理想输出。

编辑2:由于一些粗心的错误编辑我的函数后,所有输入整数都返回true。

4

1 回答 1

1

您的原始代码中至少有两个错误:

在您的代码中,max=2从未更改过。第一个for循环测试prime[1] < N未初始化。然后prime[1]被一些非素数分配了很多次。

例如,在您的第一个循环中, i 和 primenum 是

i = 2, primenum = 3, prime[1] = 3
i = 3, primenum = 4, prime[1] = 4
i = 4, primenum = 5, prime[1] = 5 
...

现在你的新代码也有错误

int i,primenum,max=1; 整数[最大值];

您定义了一个int只有one元素的数组素数。然后你尝试访问它,就像它有更多一样。这是错误的。

而以下不是你想要的

for(int j=0;j<max;j++){
   if(N==prime[j])
       return true;
}

因为正如我上面所说,prime[i] fori>0是无效的。

于 2013-09-29T21:47:56.077 回答