我的任务是从用户那里获取无限输入(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。
答案 0 :(得分:1)
原始代码中至少有两个错误:
在您的代码中,max=2
并且从未更改过。第一个for
循环测试prime[1] < N
未初始化。然后prime[1]
被一些非素数分配了很多次。
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。