以下內容參考自這裡
反素數的定義:對於任何正整數n,其約數個數記為f(
n)f (n
),例如f(
6)=4
f (6
)=4,如果某個正整數n滿足:對任意的正整數i(
0<
ii (0
<
i,都有f(
i)n)
f (i)n)
,那麼稱n為反素數。
1.乙個反素數的所有質因子必然是從2開始的連續若干個質數,因為反素數是保證約數個數為
x x
的這個數
n' role="presentation" style="position: relative;">n
n盡量小。
2.同樣的道理,如果n=
2t1∗
3t2∗
5t3∗
7t4∗
... n=2
t1∗3
t2∗5
t3∗7
t4∗.
..,那麼必有t1
≥t2≥
t3≥t
4≥..
. t1≥
t2≥t
3≥t4
≥...
1.給定乙個數n,求乙個最小的正整數x,使得x的約數個數為n。
2.求出1∼
n 1∼n
中約數個數最多的這個數。
基於它的性質我們可以建一顆搜尋樹,找到正解。比如n=
pa11
∗pa2
2∗..
.∗pa
kkn =p
1a1∗
p2a2
∗...
∗pka
k,以每乙個pi
p
i為樹的一層建立搜尋樹,深度為k。 以12
=22∗
3 12=2
2∗3為例進行說明,建樹如下:
可以看出從根節點到每乙個葉子結點這條路徑上的所有數字乘起來都是12的約數,所以12有6個約數。
貼乙份模板**。
n的約數
#include
#include
#include
#define ll long long
using
namespace
std ;
ll n,minnum,cnt ;
const
int prime[20] = ;
//num:當前列舉到的數,k:列舉到的第k大的質因子;cntt:該數的約數個數;maxxcnt:質因子個數上限;
void dfs(ll num,ll k,ll cntt,int maxxcnt)
ll temp = num ;
for(ll i = 1 ; i <= maxxcnt ; i++) //開始列舉每個質因子的個數;
}int main()
return
0 ;}
python打反素數 反素數求解 反素數打表
問題描述 對於任何正整數x,起約數的個數記做g x 例如g 1 1,g 6 4.如果某個正整數x滿足 對於任意i 0 現在給乙個n,求出不超過n的最大的反素數.比如 輸入1000 輸出 840 思維過程 求 1.n 中約數在大的反素數 求約數最多的數 如果求約數的個數 756 2 2 3 3 7 1...
反素數求解 反素數打表
問題描述 對於任何正整數x,起約數的個數記做g x 例如g 1 1,g 6 4.如果某個正整數x滿足 對於任意i 0現在給乙個n,求出不超過n的最大的反素數.比如 輸入1000 輸出 840 思維過程 求 1.n 中約數在大的反素數 求約數最多的數 如果求約數的個數 756 2 2 3 3 7 1 ...
反素數求解 反素數打表
問題描述 對於任何正整數x,起約數的個數記做g x 例如g 1 1,g 6 4.如果某個正整數x滿足 對於任意i 0現在給乙個n,求出不超過n的最大的反素數.比如 輸入1000 輸出 840 思維過程 求 1.n 中約數在大的反素數 求約數最多的數 如果求約數的個數 756 2 2 3 3 7 1 ...