本关任务:编写一个能判断一个数是否是素数的程序。
为了完成本关任务,你需要掌握:1.素数的定义。2.除余法 3.算法效率
根据提示,在右侧编辑器补充代码,计算并输出某个数是否是素数。 评测时长限制为20秒,请注意你算法的时间效率。 要求用python3.6编程实现。
平台会对你编写的代码进行测试:
58
; 预期输出:No
13
; 预期输出:Yes
8000001239
; 预期输出:Yes
import mathdef is_prime(num):if num > 1:if num == 2:return 'Yes'if num % 2 == 0:return 'No'for x in range(3, int(math.sqrt(num) + 1), 2):if num % x == 0:return 'No'return 'Yes'return 'No'if __name__ == "__main__":number = input()a=is_prime(int(number))print(a)
本关任务:编写一个能使用爱拉托斯散筛法求N以内的素数的程序。
为了完成本关任务,你需要掌握:1.爱拉托斯散筛法的原理 爱拉托斯散筛法是典型的以空间换取时间的算法。 算法过程:例如要计算100以内的素数 (1)找出sqrt(100)内是素数[2,3,5,7] (2)去掉2的倍数值 (3)去掉3的倍数值 (4)去掉5的倍数值 (5)去掉7的倍数值 (6)删除1
根据提示,在右侧编辑器补充代码,输入数N,输出N以内的素数的列表。 要求采用python3.6编程实现
平台会对你编写的代码进行测试:
测试输入:120
; 预期输出: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113]
测试输入:512
; 预期输出: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509]
import mathdef is_prime(num):if num > 1:if num == 2:return 'Yes'if num % 2 == 0:return 'No'for x in range(3, int(math.sqrt(num) + 1), 2):if num % x == 0:return 'No'return 'Yes'return 'No'list2=[]def Evidence(num):list1=list(range(2,num))for i in range(2,int(math.sqrt(num))+1):if(is_prime(i)=='Yes'):list2.append(i)for i in list2:t=2while(True):if (i*t)>num:breakelse:if((i*t)in list1):ve(i*t)t=t+1print('[',end='')for i in range(len(list1)):if(i==len(list1)-1):print(list1[i],end=']')else:print(list1[i],end=', ')if __name__ == "__main__":number = input()Evidence(int(number))
本关任务:编写一个并发程序实现对多个大素数的判断。
为了完成本关任务,你需要掌握:1.素数判断,2.多进程并发编程。
使用concurrent.futures.ProcessPoolExecutor实现并发编程
根据提示,在右侧编辑器补充代码, 判断是否为素数(True/False)。
平台会对你编写的代码进行测试:
测试输入:112272535095293,112582705942171,112272535095293,115280095190773,115797848077099,1099726899285419
; 预期输出: True
True
True
True
True
False
map 方法会返回一个map(func, *iterables)迭代器,迭代器中的回调执行返回的结果有序的。
from concurrent.futures import ProcessPoolExecutor
import math
#素性判断函数
def is_prime(num):if num > 1:if num == 2:return Trueif num % 2 == 0:return Falsefor x in range(3, int(math.sqrt(num) + 1), 2):if num % x == 0:return Falsereturn Truereturn False#通过调用is_prime,设计并发函数实现对多个大素数的判断
def main():with ProcessPoolExecutor() as executor:for i in executor.map(is_prime, PRIMES):print(i)if __name__ == '__main__':PRIMES=list(map(int,input().split(",")))main()
本文发布于:2024-02-05 03:04:15,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170722503762427.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |