枚举孪生素数对
题目:http://www.tsinsen.com/A1034
答案:
#include <iostream> #include <math.h> using namespace std; bool fun(int i) { bool flag1=false; bool flag2=false; for(int u=2; u<=sqrt(i); u++) { if(i%u==0) flag1=true; } if(i<2) flag1=true; for(int u=2; u<=sqrt(i+2); u++) if((i+2)%u==0) flag2=true; // cout<<flag1<<flag2<<endl; if(!flag1&&!flag2) return true; else return false; } int main() { int m; int n; bool flag=false; cin>>m>>n; for(int i=m; i<=n; i++) { if(i+2<=n) { if(fun(i)) { flag=true; cout<<i<<" "<<i+2<<endl; } } } if(flag==false) cout<<"-1"; return 0; }
所用算法是最笨的枚举整除(2,sqrt(i))判断质数。注意2,是质数,1不是。
并且题目要求包含端点,另外如果枚举整除(2,n)会超时。
一开始第一个测试点总是不能ac,后来发现没有仔细看题。
主要就是要注意端点以及端点以外,题目讨论区中有几个问第一个测试点的,我正好也错了,就写出来了。可以枚举,本题本来没有什么难度,如果时间限制的更小,就必须搜一下新算法了。
本博客专注于错误锦集,在作死的边缘试探