注册 登录
编程论坛 C语言论坛

小白感谢,求素数的问题。

chwn1985 发布于 2019-12-13 10:04, 2375 次点击
新人自己尝试做素数判断,但是一直得不到结果;
我的逻辑是:随机输入a,0<b<a,a%b取余不等于0,即可判断a为素数。其余为合数;
我尝试用while做循环;
我该如何判断余数?
另外,我这个代码逻辑有没有问题,特别是while里面的循环条件?
感谢。
程序代码:
#include<stdio.h>
int main(void)
{
    int a, b,c;
    printf("请输入一个数字:\n");
    scanf_s("%d", &a);
    b = 2;   
    while (b<a&&a>2)
    {   
        c = a%b;
        b++;        
    }
    // 假如c=0,则输出“合数”;
        否则,“素数”;
    return 0;
}
9 回复
#2
rjsp2019-12-13 10:40
完全根据你的代码改写的,算法没变
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned n;
    printf( "请输入一个数字: " );
    scanf( "%u", &n );

    _Bool isprimer = 1;
    for( unsigned i=2; i<n; ++i )
    {
        if( n%i == 0 )
        {
            isprimer = 0;
            break;
        }
    }

    puts( isprimer ? "素数" : "合数" ); // 0和1既非素数又非合数
}

#3
forever742019-12-13 10:42
你的while整除以后并不停下,会一直算到n-1
所以错了
#4
chwn19852019-12-13 14:18
回复 2楼 rjsp
感谢。
不过,我刚开始自学,还没接触这么深。
目前只有while、if和for函数。
数组刚开始学。
所以,您写这个代码里面的表达,有些地方我看不懂。
感谢。
#5
chwn19852019-12-13 14:22
回复 3楼 forever74
对。
我是想让他除到a-1.
在所有的结果里,核查c是否等于0.
一旦c=0,就可以输出“合数”;
c!=0的话,就输出“素数”;
这应该是又是一个循环的问题吧。
我有点糊涂,不知道这个是否能表达出来;
#6
bcbbcclbbc2019-12-13 16:14
这个你不是没有加入判断c的值么?自然就没办法的出结果
可以把c的值先赋个1然后并在while的判断语句中,如果c为0 ,退出循环,否则循环到a-1
#7
chwn19852019-12-14 09:57
回复 6楼 bcbbcclbbc
感谢;
好多基础问题,我可能没搞清楚。
我先继续学习一段时间再回头看这个问题吧。
感谢。
#8
wolf_555552019-12-15 23:54
#include<stdio.h>
int main(void)
{
    int a, b,i=0;
    printf("请输入一个数字:\n");
    scanf_s("%d", &a);
    b = 2;   
    while (b<a&&a>2)
    {   
        if(a%b == 0)
        {
            printf("合数\n") ;
            i=1;
            break;
         }
        else
        b++;        
    }
if(i=0)
    printf("素数\n");
    return 0;
}

//这个能看懂吧!

[此贴子已经被作者于2019-12-16 00:38编辑过]

#9
chwn19852019-12-17 15:11
回复 8楼 wolf_55555
运行不出来百分百结果;
感谢。
#10
wolf_555552019-12-24 15:01
#include<stdio.h>
int main(void)
{
    int a, b,i=0;
    printf("请输入一个数字:\n");
    scanf_s("%d", &a);
    b = 2;   
    while (b<a&&a>2)
    {   
        if(a%b == 0)
        {
            printf("合数\n") ;
            i=1;
            break;
         }
        else
        b++;        
    }
if(i==0)
    printf("素数\n");
    return 0;
}
1