nowcoder猜想

题目描述
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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值