家庭作业帮助:素数标识符C ++

时间:2013-09-29 21:39:15

标签: c++ class primes

我的任务是从用户那里获取无限输入(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&lt;&lt; N <&lt;输出是“素数”。这就是我所期望的输出意味着什么。

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

1 个答案:

答案 0 :(得分: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 prime [max];

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

以下不是你想要的

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

因为如上所述,i>0的prime [i]不是valide。