数学中的质数,编程思路解决

分类: 研究-学习 |
下午沈大业在预习数学,我对这题也没啥思路。就在想它们能不能再约分,降低计算的难度。
if n % i==0:
print(n,"能被",i,"整除")
else:
print(n,"是质数。")
if n % i==0:
print(n,"能被",i,"整除")
else:
flag=1
print(n,"是质数。")
if n % i==0:
list1.append(i)
print(n,"是合数,其因数有:",list1+[1,n])
print(n,"是质数。")

这里面还有一个运行效率的问题。其实每个数遍历时只要从2到它的一半数值就可以了,因为另一半一定是对称的。如12的因数是1,2,3,4,6,12.到6之后除了自身之外就不再有合适的因数了,因此直接吧for i in range(2,j)变更为for i in range(2,j//2+1)就可以了。
但第一个数字442想到221就想不下来了。看这个数字好像还可以继续变小,可尝试了几次都没进展。
这个时候想到了用程序找出其质数。
之前听过老师介绍求某个数范围内的所有质数,用的双重循环的思路。那今天我就想亲自实践一下。
对其他的编程语言也不太懂,就想到了python。
一开始根据自己的思路,编写的代码如下:
n=int(input("请输入要判断的数:"))
for i in
range(2,n):
又想到了添加一些控制语句(添加了一个flag作标记):
n=int(input("请输入要判断的数:"))
flag=0
for i in range(2,n):
if flag==1:
这直接让我没有了信心。这个小小的问题这么难解决?
不自信还要解决问题,只得求助度娘。https://www.jb51.net/article/83616.htm
====
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。素数在数论中有着很重要的地位。比1大但不是素数的数称为合数。1和0既非素数也非合数。质数是与合数相对立的两个概念,二者构成了数论当中最基础的定义之一。基于质数定义的基础之上而建立的问题有很多世界级的难题,如哥德巴赫猜想等。算术基本定理证明每个大于1的正整数都可以写成素数的乘积,并且这种乘积的形式是唯一的。这个定理的重要一点是,将1排斥在素数集合以外。如果1被认为是素数,那么这些严格的阐述就不得不加上一些限制条件。 前几天偶尔的有朋友问python怎么判断素数的方法,走网上查了查,总结了python脚本判断一个数是否为素数的几种方法:
调用了math模块,我想不至于这么复杂吧?还不大容易理解
====
又继续再找:
一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除(2, 3, 5, 7等),换句话说就是该数除了1和它本身以外不再有其他的因数。
首先我们来第一个传统的判断思路:
def handlerNum(num):
# 质数大于 1
if num > 1:
# 查看是否有其他因子
for i in range(2, num//2+1):
if (num % i) == 0:
print(num,"不是质数")
break
else:
print(num, "是质数")
# 如果输入的数字小于或等于 1,不是质数
else:
print(num, "不是质数")
if __name__ == '__main__':
# 用户输入一个数字
num = int(input("请输入一个数字: "))
# 调用函数处理方法
handlerNum(num)
其实上面循环中的else和if并不是成对的,而是和for并排的,当然for和else搭配出现并不少见,慢慢地会有所体会的,这段代码的含义是,当for里面的条件都不满足时,就会执行else里面的代码。以上就是我们按照传统的思路来解题,其实还有一种更快,更简单的方法解题,那就是利用真或假来判断。
#处理函数
def IsPrime(num):
#根据质数的定义,其必须大于0
if num == 1:
return False
#循环需要判断的次数
for i in range(2, num // 2 + 1):
#如果该数有其他的因子返回False,即不是质数
if num % i == 0:
return False
return True
if __name__ == '__main__':
#输入一个数字
num = eval_r(input("请输入一个数,判断是否为质数:"))
#调用方法(如果是质数返回True,否则返回False),打印结果
print(IsPrime(num))
这两种方法大体都差不多,只不过这给我们以后解决问题提供了一种新的思路。
这里面还用到了自定义函数。对于初学者来说也不是非常容易理解。
借着这两次查询,我头脑中突然想到了列表的应用。
便继续用自己的方式尝试了起来。
====
n=int(input("请输入要判断的数:"))
list1=[]
for i in range(2,n):
if len(list1)>=1:
else:
要说明的是,本来我只考虑到list1中的数据,沈大业补充说1和它本身也是自己的因数,于是我就粗暴地加上了这两个数字(暂时也没想到更好的办法)。

这里面还有一个运行效率的问题。其实每个数遍历时只要从2到它的一半数值就可以了,因为另一半一定是对称的。如12的因数是1,2,3,4,6,12.到6之后除了自身之外就不再有合适的因数了,因此直接吧for i in range(2,j)变更为for i in range(2,j//2+1)就可以了。
=========
刚才又实践了下,发现倒数第三行list1.clear()也是多余的,可以去掉!