很多逻辑思维的题不会,一方面是逻辑思维确实需要锻炼,另一方面是这方面可能涉及到的数学知识早就忘完了。
质数,素数,一个东西,除了1和它自身外,不能被其他自然数整除的数叫做质数(素数)。1不是质数。2是最小的质数(既是质数又是偶数),除了2之外,质数都是奇数
合数:指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。4是最小的合数。
因数:约数,整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数。
分解质因数:合数都可以写成几个质数相乘的形式,分解质因数只针对合数。
判断质数方法:
用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
为什么除到sqrt(这个数)就可以了呢?因为如果能被整除的,肯定一个小于sqrt(这个数),另外一个大于,所以只检查一半就可以了。
题目:判断101-200之间有多少个素数,并输出所有素数。
import math
leap = 1
count = 0
for i in range(101,201):
for j in range(2, int(math.sqrt(i))+1):#这里加1是因为:比如9的话,sqrt(9)=3,必须加1才能把3算进去,否则9就判断错了
if i%j == 0:
leap = 0#可以整除的话标志位改为0
break
# 标志位为1,则质数个数加1
if leap == 1:
count += 1
print(i)
leap = 1
print('质数个数:', count)
分解质因数方法:
对n进行分解质因数,应先找到一个最小的质数k(最小的质数就是2),然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n!=k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
n = int(input('please input a number:'))
l = []
while n>=2: #最小的质数是2
for k in range(2, n+1): #从最小的质数开始除
if n%k == 0: #可以整除,则除之后跳出循环,再从最小的质数2除起,如果不能整除,则除3,偶数肯定都可以被2整除
n = n//k #整除的话,商作为下一次的 n
l.append(k)
break
print(l)
或者:
n = int(input('please input a number:'))
l = []
k = 2 #从最小的质数2开始
while n != k:
if n%k == 0:
l.append(k)
n = n/k
else:
k += 1
else:
l.append(k)
print(l)