求一千萬以內由兩個素數相乘的數,並按從小到大排列,如 6 2 3,10 2 5。有什麼比較好的思路嗎?

時間 2021-05-10 03:34:11

1樓:紐澤西管風琴

Mathematica:

n=1*^7;l=Prime@Range@PrimePi@n;

Union@@Table[p TakeWhile[l,p#~ 5s

2樓:冒泡

是要求兩個不同素數麼,還是可以相同,比如4=2x2

不管是什麼要求,我第一反應就是篩,弄個bitmap,類似篩素數,但是碰到素數略過,碰到兩個素數相乘的,就把它所有倍數篩掉,因為n=pq這種形式的倍數可能是三個素數以上相乘的

3樓:大頹廢

不懂c,大概說下思路。

每十萬分個組,利用多執行緒將所有分組裡的素數求出來,並存入類似於字典的資料結構,key就是順序序號。

然後遍歷的時候就可依次輸出了。

速度還可以,就是要儲存所有素數。

4樓:

用線性篩寫了乙個,時空複雜度均為#include"bits/stdc++.h"

using

namespace

std;

const

intmaxn

=10000000+10

;bitset

>isPrime

;int

smallestFactor

[maxn

],primes

[maxn/10

],primeCount

;vector

sieve

(intn)

for(

intj=0

;j

&&1LL

*primes[j

]*i<=n;

j++)}

vector

ans;

for(

inti=2

;i<=n;

i++)}

return

ans;

}int

main()

5樓:蒙澎權

篩素數過程就是標記素數的倍數,所以對於整數n,你可以順便儲存下其最小質因子發factor[n]

然後掃瞄1000w以內的數,對於整數n,若factor[n] = n,則n是素數。否則檢查n / factor[n]是否是素數,是就說明n是兩個素數相乘的結果。

篩選素數時空複雜度是O(n),也就是以上演算法的時空複雜度。

6樓:陳碩

A001358 - OEIS

1. 生成500萬以內的素數表。

2. 從以上素數表中取兩個數,乘積放入 vector ,注意不重不漏。

3. 對 vector 排序。

int max = 1e7;

std::vector primes = getPrimes(max/2);

printf("%zd\n", primes.size());

std::vector biprimes;

for (int i = 0; i < primes.size() && primes[i] < sqrt(max); ++i) {

for (int j = i; j < primes.size() && primes[i] * primes[j] < max; ++jbiprimes.push_back(primes[i] * primes[jprintf("%zd\n", biprimes.

size排序略

我算出來的結果有 1904324 個數。

如何證明兩個正態分佈的密度函式相乘還是乙個正態分佈的密度函式?

易夕 這個問題很容易啊,正態分佈的PDF表示式都是已知的,簡單推導一下就知道了啊。兩個正態分佈的概率密度函式 PDF 分別為 二者相乘得到 可以看到,可以看成乙個正態分佈 的PDF乘以縮放因子 的結果。其中,縮放因子 正態分佈的均值 正態分佈的方差 用MATLAB驗證一下。首先,分別計算 和 的PD...

求乙個兩千以內音質好的的藍芽音箱?

TpBoy TpBoy 2021年有哪些高價效比藍芽音箱推薦,哪個品牌好,哪款最值得購買 它是一款家庭裝的無線網路藍芽音響,能夠根據觸碰開展操縱,還裝有柔和的呼吸燈,輸出的響聲圍繞立體式,能最大限度復原真正的音色。製成手拿包樣式的音響,十分可攜式,假如衣服褲子的袋子稍大一點,乃至都能夠放進去,由於其...

unity定義兩個向量,求它們的夾角和距離?

正好現學現賣 剛學到這個求夾角的遇到了一堆的新概念包括點積dot product 和 corss product 我學點積的時候最懵逼的就是不知道這個公式的幾何意義到底是什麼後來看到乙個解釋,瞬間秒懂.向量點乘和差乘的本質上有什麼區別以及兩個.問答 問答 果殼網科技有意思 然後夾角求法實際上就是看過...