Backdoor CTF 2013: 杂项 75-----定时求随机个素数之和
来源:互联网 发布:java 抓取网页内容 编辑:程序博客网 时间:2024/06/15 06:42
题目
打开传送门之后,题目要求在3秒内提交前N(随机个)素数的和。
re.findall(pattern, string):详细看
搜索string,以列表形式返回全部能匹配的子串。
r(raw)用在pattern之前,表示单引号中的字符串为原生字符,不会进行任何转义
+加号,指定将前面的RE重复1次或者任意多次,而且总是试图尽量多次地匹配。
re.findall(r'[a-z]+','liuyaN1234ab9') #返回['liuya', 'ab']
1.首先生成质数列表:
2.然后是读取素数表计算前N个素数的和并提交结果:
import requestsimport reimport math def prime_generate(n): result = list() result.append(2) result.append(3) for i in xrange(5,n+1,2): for j in xrange(3,int(math.sqrt(i))+1): if i%j == 0: break else: result.append(i) return result def calc_sum(num): finsum=0 for x in prime_generate(10000)[:num]: finsum=finsum+x return finsum def main(): url = "http://hack.bckdr.in/2013-MISC-75/misc75.php" req = requests.get(url) tmpcookies = req.cookies # Set random N. match = re.findall(r'[0-9]+', req.text); num = int(match[1]) sum=calc_sum(num) data = {"answer": sum} req2 = requests.post(url, data=data, cookies=tmpcookies) print(req2.text) if __name__ == "__main__": main()
如果想更快我觉得可以用筛选法:
我做了一个比较:
1.从奇数里挑素数+直到开根号(N)
#include<iostream> #include<cmath>using namespace std; int prime_table(int N ) {int i = 0, j = 0 , count = 0; int *prime = new int[N + 1]; if (NULL == prime) return -1; prime[2] = 1; for (i = 3; i <= N; i+=2) { prime[i] = 1; } for (i = 3; i <= N; i+=2) { for (j = 3; j <= sqrt(i); j++) { if (i%j == 0) { prime[i] = 0; count++; break; } count++; } } cout << "Times of calculation : " << count << "\n"; for (i = 2; i <= N; i++) { if (prime[i] == 1) { cout << "\t" << i; if(j++ % 10 == 0) { cout << '\n'; } } } delete [] prime; return 0; }int main() { int n; cin >> n; prime_table(n); cout << "\n"; return 0; }
2.筛选发
#include<iostream> using namespace std; int prime_table(int N ) { int i = 0, j = 0 , count = 0; int *prime = new int[N + 1]; if (NULL == prime) return -1; for (i = 2; i <= N; i++) { prime[i] = 1; } for (i = 2; i * i <= N; i++) { if (prime[i] == 0) { count++; continue; } for (j = i * i; j <= N; j = j + i) { prime[j] = 0; count++; } } cout << "Times of calculation : " << count << "\n"; for (i = 2; i <= N; i++) { if (prime[i] == 1) { cout << "\t" << i; if(j++ % 10 == 0) { cout << '\n'; } } } delete [] prime; return 0; } int main() { int n; cin >> n; prime_table(n); cout << "\n"; return 0; }
参考1
参考2
阅读全文
1 0
- Backdoor CTF 2013: 杂项 75-----定时求随机个素数之和
- Backdoor CTF 2013: Web 50
- 求前n个素数之和
- 求20个整数之和
- 求2个正整数之和
- 判断k个素数之和-LintCode
- 求把1,2,3,...,20这20个自然数排成一圈,使任意两个自然数之和为素数
- ctf中杂项试题解析
- CTF-安全杂项-功夫秘籍
- ctf笔记3--安全杂项
- 求前n个素数
- 求第100002个素数
- 求第100002个素数
- 求前100个素数
- 求第n个素数
- 求前N个质数之和
- 一道微软面试题(求指定素数个数之和)
- 利用递归求n以内的素数之和
- R实战:【I/O】标准输入输出
- kuangbin 简单搜索C题
- 如何导入numpy module到python
- K-Means聚类算法进行压缩图片
- SpringMVC学习
- Backdoor CTF 2013: 杂项 75-----定时求随机个素数之和
- 理解ES6 Promise
- twisted高并发库transport函数处理数据包的些许问题
- C语言程序设计习题1-17 编写一个程序,打印长度大于80个字符的所有输入行
- CF850B-Arpa and a list of numbers
- IAR for STM8下载、安装、破解及新建工程教程
- Codeforces 851E-Arpa and a game with Mojtaba
- centos7 安装php7.0
- 在VS2010上搭建FFMPEG环境与SDL环境配置