鱼C论坛

 找回密码
 立即注册
查看: 15890|回复: 117

[技术交流] Python:每日一题 8

  [复制链接]
发表于 2017-3-27 19:44:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

欢迎小伙伴们,一起答题!
如果你有能力,欢迎加入我们!
已经上车老司机:@ooxx7788 @lumber2388779   
点我上车  

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-27 19:45:29 | 显示全部楼层
@lumber2388779 @ooxx7788 @jerryxjr1220 @冬雪雪冬
来吧!新题目来了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2017-3-27 19:48:22 | 显示全部楼层
h = 0
leap = 1
from math import sqrt
from sys import stdout
for m in range(101,201):
    k = int(sqrt(m + 1))
    for i in range(2,k + 1):
        if m % i == 0:
            leap = 0
            break
    if leap == 1:
        print('%-4d' % m)
        h += 1
        if h % 10 == 0:
            print('')
    leap = 1
print('The total is %d' % h)
等待被大佬们指点!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2017-3-27 21:10:43 | 显示全部楼层
本帖最后由 ooxx7788 于 2017-3-27 21:15 编辑
def prime(s, e):
    flag = 1
    count = 0
    for i in range(s, e, 2):
        for j in range(2, int(i ** 0.5)+1):
            if i % j == 0:
                flag = 0
                break
        if flag:
            print('{:>{}}'.format(i, len(str(e))), end=' ')
            count += 1
            if count == 10:
                print()
                count = 0
        else:
            flag = 1

if __name__ == '__main__':
    prime(101, 200)
    print()
    prime(1, 2000)
输出
101 103 107 109 113 127 131 137 139 149 
151 157 163 167 173 179 181 191 193 197 
199 

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
新手·ing + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-3-27 21:53:42 | 显示全部楼层
list1=[]
list2=[]
count=0
for i in range(101,201):
    for j in range(2,int(i**0.5)+1):
        if i%j==0:
            list1.append(i)
for m in range(101,201):
    list2.append(m)
for a in list2:
    if a not in list1:
        count+=1
        print(a,end="  ")
print('总计%d个素数' % count)

101  103  107  109  113  127  131  137  139  149  151  157  163  167  173  179  181  191  193  197  199  总计21个素数

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
新手·ing + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2017-3-27 21:56:25 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-27 21:57:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-27 22:39:40 | 显示全部楼层
新手·ing 发表于 2017-3-27 21:56
谢谢支持
点我上车

上车???怎么弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 15:24:48 | 显示全部楼层
primenum = []
notprimenum = []
for i in range(101,201):
    maxnum = int(i**0.5)
    minnum = 2
    flag = True
    while True:
        if i%maxnum == 0:
            flag = False
            break
        elif i%minnum == 0:
            flag = False
            break
        elif minnum == maxnum or (minnum+1) == maxnum:
            flag = True
            break
        else:
            maxnum -= 1
            minnum += 1
    if flag:
        primenum.append(i)
    else:
        notprimenum.append(i)

print('范围101-200中素数有:',primenum)
print('非素数有:',notprimenum)

结果输出
范围101-200中素数有: [101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
非素数有: [102, 104, 105, 106, 108, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 129, 130, 132, 133, 134, 135, 136, 138, 140, 141, 142, 143, 144, 145, 146, 147, 148, 150, 152, 153, 154, 155, 156, 158, 159, 160, 161, 162, 164, 165, 166, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 180, 182, 183, 184, 185, 186, 187, 188, 189, 190, 192, 194, 195, 196, 198, 200]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-3-28 17:27:21 | 显示全部楼层
xunzhao 发表于 2017-3-27 22:39
上车???怎么弄

点击链接,可以订阅,也可以一起出题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-28 17:28:08 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:40:35 | 显示全部楼层
这个偷个懒,不写了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-24 18:26:06 | 显示全部楼层
只能想到循环求余,但是数字来到 7位数就跑不动了, 应该是嵌套循环的锅
def find_prime(a,b):
    """输入两参数,寻找[a,b]范围内的质数,目前支持从3开始往后的整数,a>b就不鸟你了"""
    nums = []
    for i in range(a,b+1):
        sqrt_i = int(i**0.5) + 1
        for j in range(2,sqrt_i):
            if i%j==0:
                break
            elif j == sqrt_i - 1:
                nums.append(i)
            else:
                continue
    print(nums)
    print("共有 %d 个" % len(nums))

find_prime(101,200)
#结果
[101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
共有 21 个
找到一行的代码,每一个要判断的数都形成求余的列表,用成员关系判断,真厉害
不过没有break的机制,循环的次数估计要多很多
print([p for p in range(101, 201) if 0 not in [ p%d for d in range(2, int(p**0.5)+1)]])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-7 11:18:09 From FishC Mobile | 显示全部楼层
a=0
for i in range(101,201):
     for j in range(1,i+1):
            if i%j==0:
                 a+=1
      if a==2:
           print(i)
     a=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-27 17:55:21 | 显示全部楼层
import math
count = 0       #记素数的个数
n = 0           #记数排版
for i in range(101,200):
    s = int(math.sqrt(i))
    isPrime = True
    for j in range(2,s+1):
        if i%j == 0:
            isPrime = False
            break
    if isPrime == True:
        print(i,'\t',end = '')
        n += 1
        count += 1
    if n == 5:
        n = 0
        print()
print('\nTotal:',count)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-30 22:04:13 | 显示全部楼层
i = 101
while i<=200:
    n = 2
    r = 0
    while n<i**0.5:
        if i%n == 0:
            r = 1
            break
        n += 1
    if r==0:
        print (i)
    i += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-10 15:15:55 | 显示全部楼层
本帖最后由 抑痒指 于 2017-6-10 15:19 编辑
import math

def fuction1(a):
    '''判断a是否是素数,若是,返回1,否则返回0'''
    i = int(math.sqrt(a))
    j = 1
    for z in range(1,i+1):
        for x in range(i,a):
            if z*x ==a:
                return 0
    return 1

'''
测试函数1代码
print(fuction1(101))
'''
j=0
for i in range(101,201):
    if fuction1(i):
        j += 1
print(j)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-4 11:52:35 | 显示全部楼层
def prime_number(x,y):
    result = []
    for i in range(x,y+1):
        if i == 2:
            result.append(i)
            continue
        for j in range(2,i):
            if i%j == 0:
                break
        else:
            result.append(i)
    return result

if __name__ == '__main__':
    print(prime_number(101,200))

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
新手·ing + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-13 22:28:49 | 显示全部楼层
import math

def getPrime():
    
    prime_list = []
    count = 0
    for i in range(101,201):
        flag = 0
        for j in range(2,int(math.sqrt(i)+1)):
            if i % j == 0:
                flag = 1
         
        if flag == 0:
            count += 1
            prime_list.append(i)

    return prime_list,count

        
p,c = getPrime()

print('101-200之间总共有%d个素数' % c)
print(*p)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-20 21:04:53 | 显示全部楼层
本帖最后由 木一 于 2017-8-20 21:08 编辑
import math as m
n = 0
list1 = []
for i in range(101,201):
    for a in range(2,int(m.sqrt(i)) + 1):
        if i % a != 0:
            s = 0
        else:
            s = -1
            break
    if s == 0:
        n += 1
        list1.append(i)
print('共有%d个素数'%n)
print('它们分别是:')
for each in list1:
    print(each,end = ' ')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 00:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表