题目描述
老师给ellen出了一道难题,老师随机在0到10000之间抽出一个数n,让ellen计算有多少种情况满足a+b=n,并且a,b都是素数。Ellen很痛苦,你来帮帮他吧?
输入
输入一个0-10000之间的数
输出
输出满足上述要求的个数;
样例输入
0
10000
6335
样例输出
0
127
0
#include<iostream> #include<vector> using namespace std; bool isprime(int n) { if (n <2)return false; for (int i = 2; i *i<= n; i++) { if (n%i == 0) return false; } return true; } int main() { int n; vector<int >v; while (cin >> n) { int cnt = 0; for (int i = 0; i < n; i++) { if (isprime(i)) { v.push_back(i);//素数打表 } } /*for (vector<int >::iterator it = v.begin(); it!=v.end(); it++) { cout << *it; cout << " "; }*/ /*vector<int>::iterator it1 = v.begin(); vector<int>::iterator it2 = v.end(); while (it1 != it2) { if (*(it1)+*(it2) == n) { cnt++; --it2; ++it1; } else if (*(it1)+*it2> n) { --it2; } else { ++it1; } }*/ int a = 0, b = v.size() - 1;//主要的思想是有序,然后two point,和二分查找相似。 while (a < b) { if (v[a] + v[b] == n) { cnt++; b--; a++; } else if (v[a] + v[b]>n) { b--; } else { a++; } } cout << cnt << endl; v.clear(); } //system("pause"); return 0; }
注意那个vector要v.clear()。和数组不一样,不会覆盖。