求100万以内的所有素数个数
第一种方法
思路:当前数为i,则遍历比int(sqrt(i))+1小的所有数是是否都不可以整除,是,则是素数
理论:如果遍历所有比i小的除数j并且当除数j>int(sqrt(i))时,如果j能整出i,那么必定存在一个小于int(sqrt(i))的数能整出i,因此我们只需只需遍历int(sqrt(i))+1以内的数即可
代码
cnt = 0
for i in range(2,1000000):
for j in range(2, int(i ** 0.5) + 1):
if i % j == 0:
break
else:
cnt += 1
print(cnt)
输出结果如下
78498
第二种方法
理论
- 假如一个整数是合数,则一定存在一个小于它的素数作为其因数。比如9是一个合数,而素数3就是它的一个因数。
- 假如我们知道了小于一个数的所有素数,则只需确定该数能不能被这些素数整除即可。如果不能被整除,则这个数一定是个素数。反之,则不是。
- 也就是说当我们获得一个素数时,可以将它所有的倍数都标记为非素数,这样当我们遍历到一个数时,他没有被任何小于它的素数标记为非素数,则可以确定该数是个素数。
- 比如:从2开始,在初始化时2就是素数。3是类似。遍历到4时,4已经被素数2给标记了,直接跳过
思路
- 初始化一个大范围内的列表,初始时所有数都为素数,遍历时按照以上理论将所有的非素数标记出来即可
代码
cnt = 0
is_prime = [True]*1000000
is_prime[0] = False
is_prime[1] = False
for i in range(2, 1000000):
if is_prime[i] is False:
continue
cnt += 1
k = i
while k * i < 1000000:
is_prime[k * i] = False
k += 1
print(cnt)
输出结果
78498
打印九九乘法表
思路:每一次内层循环j只要循环到外层循环i即可
代码
#!/usr/bin/env python
#coding=utf-8
def multiplicationTable():
for i in range(1,10):
for j in range(1,i+1):
r=i*j
print("%d*%d=%-3d"%(i,j,r),sep='',end=' ')
print('\n')
if __name__=='__main__':
multiplicationTable()
输出结果如下
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
求几何级数的第N项
思路
- 几何级数的形式是:
a+a*q+a*q^2+a*q^3+...+a*q^n
- 需要输入的项是:a,q,n
代码
# !/user/bin/env python
# coding = utf-8
a=int(input('请输入几何级数的a: '))
q=int(input('请输入几何级数的q: '))
n=int(input('请输入几何级数的n: '))
sum=0
for i in range(0,n+1):
sum += a * q ** i
print(sum)
输入输出结果如下
请输入几何级数的a: 3
请输入几何级数的q: 2
请输入几何级数的n: 4
93
求菲波那切数列的第101位
先写出递推公式再来写实现,递推公式如下
思路
- fib[0]=1 当i=0
- fib[1]=1 当i=1
- fib[i]=fib[i-1]+fib[i-2] 当i>1
- fib的第101位也就是fib[100]