关于PAT Basic Level 1013题的感想
来源:互联网 发布:淘宝双12报名条件 编辑:程序博客网 时间:2024/05/21 11:10
一道神奇的题目
其主要矛盾在于运算
数素数 1013
令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。
输入格式:
输入在一行中给出M和N,其间以空格分隔。
输出格式:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
为什么说他神奇呢,在于这题用python做有天生的缺陷,即运算能力不够。如果直接求前10000个素数,python的运算肯定弱于C/C++,即使逻辑对,判断程序也是直接超时了。
除非对python特别优化,运算超过3步的都用全局变量可以到达压缩时间的要求。可是这就背离了我使用python的初衷,python应该是方便快捷优雅的,算法加速交给C去做。
下面给出演示,C++代码来自PAT (Basic Level) Practise (中文)1013. 数素数 (20)
python是自己写
C++
python
很明显,两个区别一下出来了。尤其在第4个测试点,C++用了12ms,python本地则使用了2.3s来输出全部前10000个素数。
顺便把10000个素数给列出来好了该文件在地震中消失
做考试练习时候,简单粗暴是最有效的方法;要是做项目的话,肯定直接混合编程做个C包import example
献上拙劣的Python代码
#coding=utf#令Pi表示第i个素数。现任给两个正整数M <= N <= 10**4,请输出PM到PN的所有素数。import mathraw=input()rawf=raw.split()n,m=int(rawf[0]),int(rawf[1])#m=int(rawf[0])#n=int(rawf[1])out=""#判断是否是素数;同时及一个数被所有小于他的数去整除,这里没有优化def su(n): #if prime number if n<=1: return False for x in range(2,int(math.sqrt(n))+1):#迭代器range()替换为素数列表,减少运算 if n%x==0 : return False return Trueadder=1#count_su=0def su_creat(): global adder #global count_su while True: adder+=2 if su(adder): #count_su+=1 return adder#素数循环生成器-未来考虑做一个可迭代对象、类content=[2,]content.append(su_creat())while len(content)<max(m,n): content.append(su_creat())#得到前max(m,n)个素数content=content[min(m,n)-1:max(m,n)]#print(content)输出对应的格式for each in content: out+=' '+str(each) if (content.index(each)+1)%10==0: print(out.strip()) out=''if len(out)>0: print(out.strip())
0 0
- 关于PAT Basic Level 1013题的感想
- 浙大 pat Basic Level 1013
- PAT乙级(Basic Level)真题 >福尔摩斯的约会
- 【PAT 乙级(Basic Level)】福尔摩斯的约会
- PAT(Basic Level)_1014_福尔摩斯的约会
- PAT(basic level) 1013 数素数(20)
- PAT乙级(Basic Level)真题1001
- PAT乙级(Basic Level)真题1002
- PAT乙级(Basic Level)真题1003
- PAT乙级(Basic Level)真题1004
- PAT BASIC LEVEL 1061. 判断题(15)
- PAT乙级(Basic Level)真题 >月饼
- PAT乙级(Basic Level)真题 >人口普查
- PAT乙级(Basic Level)真题
- PAT (Basic Level) Practise
- pat basic level 1016
- pat basic level 1018
- pat basic level 1019
- 居中(水平居中+垂直居中)
- GPA
- Unity3D学习笔记之四完善Prefab并添加First Person Controller
- Python个人代码库: GPI模块编写
- 使用NSSecureCoding协议进行对象编解码
- 关于PAT Basic Level 1013题的感想
- PAT A1025 PAT Ranking
- AFNetworking2.0源码解析
- 解决键盘遮挡输入框(UITextField)问题
- Number Sequence - UVa 10706
- android开发即时刷新某路径下的文件
- LeetCode_Search in Rotated Sorted Array II
- 向有序循环单向链表中插入节点
- QQ5.0主界面实现