筆面試題之 求小於N的質數中和為N的質數對
阿新 • • 發佈:2019-01-01
輸入正整數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;
}