使用 If 语句查找素数

问题描述 投票:0回答:4

下面是一段代码,显示输出,说明用户输入的数字是否是素数。

#include <stdio.h>
#include <stdlib.h>

int a,b;
int main(void) {

 printf("Enter number: ");
 fflush(stdout);
 scanf("%d",&a);

 for (b = 2; b < a; b++)
 {
   if (a % b == 0)
    break;
 }

 if (b<a)
 {
   printf ("%d is divisible by %d\n", a, b);
 }

 else
 {
   printf ("%d is prime \n", a);
 }
return 0;
}

上面写的这段代码不是我的,它每次都能成功识别素数(即打印 else 子句的 printf 语句)。

我对 if 语句的理解是 if-else 语句中的 else 子句属于最近的 if 语句,该语句还没有 else 子句。因此,话虽如此,我相信上面代码中的 else 子句属于最接近的 if 语句。

我的问题是这样的:如果用户输入像 31 或 37 这样的质数或任何其他质数,那么如何打印 else 子句的 printf 语句? 考虑到 b 只会增加到

if (b<a)
,条件 (a-1) (第二个
if
语句的)将始终为真。因此,如果用户输入数字 31,则变量 b 只会增加到 30。难道不应该打印第二个 if 语句的 printf 语句吗,无论数字是否考虑到条件
if (b<a)
始终为真,用户输入的是否为素数?

上面的代码如何正确打印所有素数,从而正常工作? (根据我对 if 语句工作方式的有限理解,它不应该)

c if-statement primality-test
4个回答
4
投票

考虑到 b 只会增加到

if (b<a)
,条件
(a-1)
(第二个 if 语句)将始终为真。

事实并非如此。如果找不到除数,则 for 循环继续,直到条件

b<a
为假。这种情况发生在
b == a
时,而不是
b == a-1
时。当循环条件为 false 时,循环体不会运行,但增量仍然发生。


2
投票

这个循环

for (b = 2; b < a; b++)
{
  if (a % b == 0)
   break;
}

在两种情况下可以被中断。第一个是当

a
能被
b

整除时
  if (a % b == 0)
   break;

但对于素数,这个条件总是等于 false。

因此循环中断的另一种情况是当增量

之后
b

for (b = 2; b < a; b++)
                   ^^^

将变得等于

a
。在这种情况下

for (b = 2; b < a; b++)
            ^^^^^

将等于 false 并且控制将传递给 if-else 语句。 如果是这样,那么

b
等于
a
并且
a
是质数。


1
投票

首先,你是对的,

之间的空格
if (b<a)
{
    ...
}

else
{
    ...
}

没关系。

else
确实属于
if

其次,

if (b<a)
并不总是正确的。只要
a % b == 0
从未返回 true,循环就会一直持续到
b==a
,这会导致条件失败。他们也可以写
if (b!=a)


0
投票

这是通过使用 if else 来查找数字是否为质数的最简单方法。

导入java.util.Scanner;

公开课主课{

public static void main(String[] args) {

   System.out.print("Please enter a number:");
    
  Scanner Scan = new Scanner (System.in);
   int number = Scan.nextInt();
    if (number==2||number==3||number==5)
                System.out.println(number + " is a prime num");
        
    else if(number%2==0||number%3==0||number%5==0)
                System.out.println(number + "  not prime num");
    else
             
                System.out.println(number + " is a prime num");
                 
             

        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.