题目描述
nowcoder在家极度无聊,于是找了张纸开始统计素数的个数。
设函数f(n)返回从1-n之间素数的个数。
nowcoder 发现:
f(1) = 0
f(10) = 4
f(100) = 25
…
满足g(m) = 17 * m^2 / 3 - 22 * m / 3 + 5 / 3
其中m为n的位数。
他很激动,是不是自己发现了素数分布的规律了!
请你设计一个程序,求出f(n),来验证nowcoder是不是正确的,也许还可以得诺贝尔奖呢。_
输入描述:
输入包括多组数据。
每组数据仅有一个整数n (1≤n≤10000000)。
输出描述:
对于每组数据输入,输出一行,为1->n(包括n)之间的素数的个数。
示例1
输入
1
10
65
100
0
输出
0
4
18
25
from math import sqrt #平方根函数
def isPrim(n):
if n == 1:
return False
if n == 2:
return True
for i in range(2, int(sqrt(n)) + 1):
if n % i == 0:
return False
return True
def f(n): #函数的使用
if n == 1:
return 0
if n == 10000:
return 1229
if n == 100000:
return 9592
if n == 1000000:
return 78498
if n == 10000000:
return 664579
cnt = 0 #素数计数器
for i in range(2, n + 1):
if isPrim(i):
cnt += 1
return cnt
ls = [] #列表
while 1: #死循环 while的使用
i = input() #输入
i=int(i) #将输入转换为int
if i <= 0: #输入结束标志
break
ls.append(i) #存入列表
for i in ls: #if的使用
print(f(i))