python学习:用两种思路计算质数与合数

质数(素数)与合数:

合数指自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。

与之相对的是质数,质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。而1既不属于质数也不属于合数。最小的合数是4。(因数:如果整数a除以整数b(b≠0) 的商是整数,我们就说b是a的因数。)

计算思路:

思路①:

    假如要判断一个数字“x”是不是质数,那么根据定义,我们就直接遍历[2,x-1]范围内的的数字“i”,并分别计算每次x%i的结果是否为0,若有一个结果为0,则表明“x”可以被这个“i”整除,即“x”存在除了1和她本身之外的因数,那么x就是合数,反之,就是质数。

    代码1.1:

x = int(input("请输入要判断的整数"))
if x < 2:                         #质数的范围是[2,+∞)
   print(x,'不是质数也不是合数')
else:
    for i in range(2,x):          #对符合质数范围的进行计算
        if x%i == 0:              #先判断是否为合数
            print(x,'是合数')
            break
    else:
        print(x,'是质数')          #剩下的都是质数

思路②:

           假如一个数c是合数,那么就存在因数a,b(a,b>1),且axb=c,而axb=c表现在坐标轴上就是一个反比例函数。(即:a=c/b,c是常数)

           也就是说:当两个数a,b乘积一定时,a与b的值会呈反比例关系。而:

当a=b时,因为 a x b =c,所以a = b = √ ̄c

又因为a,b呈反比例关系,所以a,b至少有一个数字会小于或等于根号c。

(简单来说就是:如果axb=c,则a,b至少有个数会小于等于根号c

         因此,只要小于或等于根号c的数不能整除c。则c一定是质数(这里的“数”排除1)。

那么,于是,就有了第二种思路的(对比第一段代码,加入了一行新代码和修改了一处的取值):

代码2.1

x = int(input("请输入要判断的整数"))
if x < 2:                         
   print(x,'不是质数也不是合数')
else:
    x2=int(x**0.5)                 #求出根号x,并向下取整
    for i in range(2,x2+1):        #int向下取整了,末尾要 +1
        if x%i == 0:             
            print(x,'是合数')
            break
    else:
        print(x,'是质数')

看起来第二种思路似乎会比第一种思路减少了一半的计算量,我们慢慢丰富代码,最后比一下两种方式的计算时间吧。

丰富代码:

1、加入循环,使得用户可以重复提交想要判断的数字

思路①更改后:

代码1.2

x = int(input("请输入要判断的整数"))
y=x                                  #配合while达成循环
while x == y:                        #让程序能不停的循环,不知道有没有更好的方法····
    if x < 2:                         
        print(x,'不是质数也不是合数')
    else:
        for i in range(2,x):
            if x%i == 0:             
                print(x,'是合数')
                break
        else:
            print(x,'是质数')
    x = int(input("请输入要判断的整数"))  #每次输出结果后,用户可以再次输入数据并运行
    y=x                                 #配合上面的while达成循环···

思路②更改后:

代码2.2

x = int(input("请输入要判断的整数"))
y=x
while x == y:
    if x < 2:                         
        print(x,'不是质数也不是合数')
    else:
        x2=int(x**0.5)
        for i in range(2,x2+1):
            if x%i == 0:             
                print(x,'是合数')
                break
        else:
            print(x,'是质数')
    x = int(input("请输入要判断的整数"))
    y=x

2、直接设置一个区间,让程序算出指定区间内的所有质数和因数(

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值