【商湯2018-10-15線上筆試】尋找半素數
阿新 • • 發佈:2018-12-07
題目描述
數學中,兩個素數的乘積所得的自然數我們稱之為半素數。
現在我們給定一個數N,我們想要得到小於或等於N的半素數的數目。
程式碼
#include <bits/stdc++.h>
using namespace std;
vector<int> v;
set<int> s;
void ChoosePrime(int a, int b)//建立[a,b]範圍內的素數表
{
for (int i = a; i <= b; i++)
{
//2是素數,這裡是2的倍數
if (i != 2 && i % 2 == 0) continue;
// 判斷其它數值是不是素數(不要考慮2的倍數)
for (int j = 3; j*j <= i; j += 2)
{
if (i%j == 0) goto RL;
}
v.push_back(i);
RL:continue;
}
}
int main()
{
int n;
cin >> n;
ChoosePrime(2, 500000);//建立[2,500000]範圍內的素數表
int i, j, p;
for (i = 0; i<v.size(); i++)//建立[2,1000 000]範圍內的半素數表
{
for (j = 0 ; j<v.size(); j++)
{
p = v[i] * v[j];//兩個素數相乘
if (p<=n) s.insert(p);
else break;
}
}
//讀入資料,在半素數表中查詢,看是否在該表中
cout << s.size()<< endl;
return 0;
}