所以我有这个练习,我需要显示N个第一个素数,但我需要专门创建一个函数来知道数字是否是素数
#include <stdio.h>
#include <stdlib.h>
int prime(int num){
int cont,i,j=0,b;
b=num;
do{
j++;
i=0;
for(cont=1;cont<j;cont++){
if(j%cont == 0)
i++;
}
if(i == 1){
return(j);
c=j;
b--;
}
} while (b > 0);
}
int main(){
int *v,n,cont;
do{
printf("Input an integer: ");
scanf("%d",&n);
} while (n <= 0);
v = (int *)malloc(n * sizeof(int));
for(cont=0;cont<n;cont++){
v[cont] = prime(n);
}
for(cont=0;cont<n;cont++){
printf("%d ",v[cont]);
}
}
我这样做的方式的问题是,当我再次调用该函数时变量J被设置为0,我试图设置类似c = j的东西,所以当程序回到主要功能,它将具有以前的&#39; j值,但它得到一个奇怪的随机数。所以我想知道是否有办法返回&#39;结果在主要功能的主要功能,我找不到任何帮助我的东西,而不是我至少可以理解
答案 0 :(得分:2)
你的函数prime()没有按预期工作,还有很多其他错误 -
1)由于最小素数为2,因此变量cont
应从2开始。
2)scanf
在这种情况下不需要处于循环中
3)仅在v
确认为素数时才在cont
中输入值。
请参阅此函数prime2
(为清晰起见,未进行优化):
bool prime2(int n)
{
for(int i = 2 ; i<n-1;i++)
if( n% i == 0) return false;
return true;
}
int main(){
int *v,n,cont,cc=0;
printf("Input range: ");
scanf("%d",&n);
v = malloc(n * sizeof(int));
for(cont=2;cc<n;cont++){
if( prime2(cont) == true )
{
v[cc] = cont;
cc++;
}
}
for(cont=0;cont<n;cont++){
printf("%d ",v[cont]);
}
delete v;
}
输出: