求素数(C语言)用函数

求素数(C语言)用函数,第1张

#include<stdioh>
int sushu(int z);/函数声明最好放在外面,放到文件前端/
void main()
{
    int b,a;
    printf("enter a date:\n");
    scanf("%d",&b);
    a=sushu(b);
    if(a==0||b==0) 
        printf("no\n");
    else 
        printf("yes\n");
}
int sushu(int z)
{
    int i , j;/i和返回值要分开,i要做循环标尺的/
    for(i=2;i<z;i++)
    {
        if(z%i==0) 
        {
            j=0;
            break;/一旦发现不是素数,跳出for循环/
        }
        else 
            j=1;/如果用i,就是个死循环,如果是素数,每次你把i=1后for循环一直继续/
    }
    return j;
}

楼上说的不对,其实不是什么if-else语句的问题,本来就是应该for循环内运行if(a%i==0)语句的,return1;语句是在for循环外的,表示没有找到a的约数时才return1;也即表示a为素数。这里没什么问题的,
问题存在于你的while语法:你写的while(x<=100);注意你写的while后面有个分号,其实这就已经构成一个while循环了。循环内容就是“;”表示什么也不做,而循环条件是1<=100为真的,程序运行到这里就进入死循环。。。从而出现你所说的“程序没有错,可是运行之后除了‘1到100之间的所有素数是:’这行字之外啥也没有,”
只要删除while(x<=100);后面的分号就可以了,即
#include<stdioh>
intprime(int);
main()
{
intx;
printf("1到100之间的所有素数是:\n");
x=1;//这里最好是从2开始的,否则会出现1也是素数的结果。或者
//你在intprime(int);函数中单独判断一下参数为1的特殊情
//形。
while(x<=100)//这里不要分号。但do-while语句后面是有分号的
{
if(prime(x))
printf("%d",x);
x=x+1;
}
}
intprime(inta)
{
inti;
for(i=2;i<=a/2;i++)
if(a%i==0)
return0;
return1;
}

C语言-寻找素数

附代码:
#include<stdioh>
#include<mathh>
int main()//原理:设ab=c,a<b,则有a<根号c<b。若设a恒小于根号c,则只需判断a是否为因数
{
int a, b;
printf("请按从小到大输入两个素数:");
scanf_s("%d %d", &a, &b);
int n = 0,m=0,sum = 0;
double i, j;//i是从a到b的待筛选数,j是从2到根号i的除数,要判断j是否为i的因数
for (i = a; i <= b; i++)
{
m = 0;
int c = int(pow(i, 05));
for (j = 2; j <= c; j++)
{
if ((i / j - int(i / j)) == 00)
{
m++;//m是i被从2到根号i的j除了之后,商为整数,即发现j是i的因数的次数
}
}
if (m==0)
{
printf("找到素数:%d\n", int(i));
n++;
sum = sum + i;
}
}
printf("大于等于%d,小于等于%d的素数的个数为:%d\n", a, b, n);
printf("它们的和为:%d", sum);
return 0;
}

#include <stdioh>
#include <mathh>
//判断是否为素数的函数
int isPrime(int n)
{
    int i=2;
    while(i<=(int)sqrt(n))
    {
        if(n%i == 0)
            return 0;  //不是素数,直接返回0
        else
            i++;
    }
    return 1;
}
int main()
{
    int n,i;
    printf("输入一个正整数: ");
    scanf("%d",&n);
    for(i=2;i<=n;i++)
{
if(isPrime(i))  //调用函数,如果该数为素数,则输出
printf("%d ",i);
}
printf("\n");
    return 0;
}

示例运行结果:

输入一个正整数: 50

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

结合你的修改了一下
#include<stdioh>
int main(void)
{
int i, x, a, f =1;
while(1)
{
printf("请输入到哪个数为止的素数:\n");

scanf("%d", &a);
a++;

printf(" 2 ");
for ( x = 3; x < a; x+=2)
{
f=1;
for ( i = 3; i < x; i+=2)
{

if ( x % i == 0)
{
f = 0;
break;
}
}
if ( f )
printf("%7d", x);
}

printf("\n");
}
return 0;
}
--------------------------
楼主的 只要稍微修改一下就可以了
#include<stdioh>
int main(void)
{
int i, x, a, f ;
while(1)
{
printf("Enter No:\n");
scanf("%d", &a);
for ( x = 2; x <= a; x++)
{
f=1;
for ( i = 2; i < x; i++)
{

if ( x % i == 0)
{
f = 0;
break;
}
}
if ( f )
printf("%7d", x);
}

printf("\n");
}
return 0;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12588159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存