C 如果我的输入是3,它说它不是素数

C 如果我的输入是3,它说它不是素数,c,C,这个代码有什么问题,它说数字3不是素数 数字3是素数,那么这有什么问题 如果我把数字2作为输入,那么它也是错误的 this find out whether the given number is prime or not 您的for循环应更改为 fori=2;在这一行中,int num,i,j,inum,flag=0;您需要执行int num、i、j、inum、flag=1;。好的,现在想想这个变化会发生什么。我认为现在您的代码不会给出错误的输出 更新:试想如果在sqrtN范围内没有能够除以

这个代码有什么问题,它说数字3不是素数 数字3是素数,那么这有什么问题 如果我把数字2作为输入,那么它也是错误的

this find out whether the given number is prime or not

您的for循环应更改为

fori=2;在这一行中,int num,i,j,inum,flag=0;您需要执行int num、i、j、inum、flag=1;。好的,现在想想这个变化会发生什么。我认为现在您的代码不会给出错误的输出


更新:试想如果在sqrtN范围内没有能够除以N的数字,其中N%thatNumber==0,那么它就是一个素数。所以标志应该是1个原因,最初的时候我认为它是素数。如果它不是素数,那么在范围sqrtN中有一个数字,它可以除以N,其中N%thatNumber==0,因此,标志更改为0

调试器说什么?您是否单步执行了代码?如果不是:这是学习使用调试器的好时机。如果num的平方根的整数部分小于或等于2,则for循环永远不会运行。。。在这种情况下,flag是什么?inum=sqrt2;->伊努姆是1。inum=sqrt3;->inum是1。@Akshay:与其问这个问题,你应该是那个试图找出代码错误的人。那么只有你才能学习。回答您,sqrt3是1,因此循环永远不会运行。所以根据你的代码逻辑,3并不乐意帮助@Akshay
    #include<stdio.h>
    #include<math.h>
    void main()
    {
        int num,i,j,inum,flag=0;
        printf("\n Enter the number :");
        scanf("%d",&num);
        inum=sqrt(num);
        for(i=2;i<inum;i++)
        {
            if(num%i==0)
            {
                flag=0;
                break;
            }
            else
            {
                flag=1;
            }

        }
        if(flag)
        {
            printf("\n TThe number %d is prime",num);

        }
        else
        {
            printf("\n The number %d is not prime",num);
        }

    }
bool found = true;
for (i=2; i<=inum && found; ++i ) {
    if ( num%i == 0 ) found = false;
}

if ( found ) printf("Prime Number");
else printf("Not Prime");