Logo

郎哥编程

编程案例——判断自然数n是质数还是合数

2020-04-25 444

1、编程需求

阿萌要开发一个程序,该程序可以判断一个自然数n是质数还是合数。

01.png

例如学生输入自然数17,程序判断17为质数,程序输出“15:质数”。

2、认识质数和合数

要确定一个自然数是质数还是合数,需要先找出该自然数有多少个因数。因为该自然数是质数还是合数,与这个自然数有多少个因数有关。

02.png

按这些数因数个数的多少,可以分为三种情况:

03.png

只有1和它本身两个因数的为质数,质数也称为素数。有两个以上因数的称为合数。自然数1既不是质数,也不是合数。

3、判断方法

判断一个自然数是质数还是和数,可以先找出该自然数的所有因数。

如果该自然数只有1个因数,那么这个自然数既不是质数,也不是合数;如果该自然数有两个因数,那么这个自然数是质数;如果该自然数有2个以上的因数,那么这个自然数是合数。

04.png

4、程序流程图

05.png

(1)程序等待学生输入,并输出提示信息“请输入一个自然数n,或者输入quit退出程序”,学生输入的内容赋值给num;

(2)判断num是否是自然数,如果是自然数转步骤(4),如果不是自然数转步骤(3);

(3)判断num是否等于quit,如果是quit,退出程序,否则转步骤(1);

(4)调用factors函数获取num的因数个数;

(5)输出判断信息,转步骤(1)。

06.png

(1)   函数传入的参数为自然数n;

(2)   创建空list列表,用于存储自然数n的所有因数;

(3)   使用for循环找出自然数n的因数,循序范围为1~n,在循环体内,如果计数变量是自然数n的因数,就添加到list;

(4)   最后函数返回list的长度。

07.png

(1)   子流程从主流程中传入变量count,count是自然数n因数的个数;

(2)   判断count是否等于1,如果等于1,说明该自然数是1,1既不是质数,也不是合数,子流程结束;

(3)   再判断count是否等于2,如果等于2,说明该自然数是质数,子流程结束;

(4)   最后判断count是否大于2,如果大于2,说明该自然数是合数,子流程结束。

5、程序代码及解读

程序代码如下:

'''
程序文件:main.py
功能描述:判断自然数n是质数还是合数
代码编写时间:2020/04/24
作者:编程训练营
'''
 
# 定义factors函数
# 功能:求出自然数n因数的个数
def factors(n):
    # 创建一个空的list
    num_list = []
    for i in range(1,n+1):
        # 若n被i整除,i是n的因数
        if n % i == 0:
            # i添加到list
            num_list.append(i)
    # 返回num_list元素个数
    return len(num_list)
 
# 程序入口
if __name__ == '__main__':
 
    while(True):
        # 提示学生输入一个自然数
        num = input("请输入一个自然数,输入quit可退出程序:")
        # 判断num是否全部是数字
        if num.isdigit():
            # 调用factors函数获取num因数个数
            count = factors(int(num))
            # 使用多重条件判断
            if count == 1:
                print("%s:既不是质数也不是合数" % (num))
            elif count == 2:
                print("%s:质数" % (num))
            elif count > 2:
                print("%s:合数" % (num))
        # 判断num是否等于quit,如果是quit跳出循环
        elif num == "quit":
            break;
        # 输出错误信息提示
        else:
            print("输入错误,请输入一个自然数或者输入quit退出程序")

代码解读

factors函数用于求出自然数n因数的个数,代码内容在《找出自然数n的所有因数》一文中已经介绍过了,这里就不再介绍了。

程序的主体代码建立一个while循环,让程序一直处于运行状态。在while循环体内,提示学生输入一个自然数,并赋值给num,然后调用字符串对象isdigit方法判断num是否全部是数字字符。

如果num不全部是数字字符,再判断num是否等于quit,如果num是quit,调用break语句跳出循环,程序结束。

如果num全部是数字字符,调用factors函数获取num因数的个数,函数返回值赋值给count,然后程序使用多重条件结构来判断count的值,count的值分为下面三种情况:

(1)如果count的值为1,说明num是自然数1,自然数1既不是质数,也不是合数;

(2)如果count的值为2,说明num只有两个因数,只有两个因数的数是质数;

(3)如果count的值大于2,说明num至少有两个以上的因数,num是合数。

08.png 

 


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论