1. 程式人生 > >【商湯2018-10-15線上筆試】尋找半素數

【商湯2018-10-15線上筆試】尋找半素數

題目描述

數學中,兩個素數的乘積所得的自然數我們稱之為半素數。
現在我們給定一個數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; }