1. 程式人生 > >筆面試題之 求小於N的質數中和為N的質數對

筆面試題之 求小於N的質數中和為N的質數對

輸入正整數N,若存在小於N的質數對(a,b),使得兩者之和為N,求這樣的質數對有多少?
這道題首先肯定是要求小於N的質數,將小於N的質數放入一個長度可變的資料結構,那麼這個資料結構中的整數們一定是有序的。
然後既然是有序的,就可以優化之讓兩個指標分別指向開頭和結尾,若兩指標指向的值和等於N,則數量加一,否則移動指標,那麼外迴圈和內迴圈分別只要移動質數總數的一半就可以了。
因為java程式碼沒有留存,貼一個同學寫的C++程式碼。

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    return
0; } //判斷是否質數 bool prime(int x) { int i; for(i=2;i<=sqrt(x);++i) { if(x%i == 0) { return false; } } return true; } int pairCount(int n) { vector<int> primes = new vector<int>(); //把質數加到vector中 for(int i=2;i<n;++i) { if
(prime(i)) { primes.push_back(i); } } //質數對的個數 int count = 0; int size = primes.size(); for(int i=0;i<size/2;++i) { int t; for(int j=size-1;j>size/2 && t>n;--j) { t = primes[i]+primes[j]; if
(t=n) { ++count; } } } return count; }