HDU 2521 反素數(分解質因數)

2021-07-22 18:35:18 字數 963 閱讀 7903

其實跟反素數沒有什麼關係,就是讓你求區間裡的數的因數的個數最多的那個值,如果有多個符合,取最小。

分解質因數,比如24可以分解為: 23

∗31 所以24的所有因數的個數就是(3+1)*(1+1) = 8

仔細考慮一下,每個質因子的冪指數都可以選擇 [0

,x]

反素數

定義:

對於任何正整數x,其約數的個數記做g(x).例如g(1)=1,g(6)=4.如果某個正整數x滿足:對於任意i(

0<

i都有 g(

i)x)

則稱x為反素數

兩條性質:

1,乙個反素數的所有質因子必然是從2開始的連續若干個質數,因為反素數是保證約數個數為的這個數盡量小。

(證明:反證法,n為反素數,如果不是從2開始的連續若干個質數的話,假設缺x,把其中比x大的某個質因子換成x,設這個新數為m,所以g(m)= g(n),相悖。) 2,p

=2t1

∗3t2

∗5t3

∗7t4

....

. 必然 t1

>=t2

>=t3

>=..

..(證明:反證法,如果某 tx

(x那麼將tx和ty換個位置就能得到和這個數的因子的數量相等的,比這個數小的乙個數,相悖。)

ac**:

#include 

#include

using

namespace

std;

int a[5050];

int main()

temp *= (nn+1);

nn = 0;}}

a[i] = temp;

}scanf("%d",&t);

while(t--)

}printf("%d\n",ans);

}return

0;}

HDU 2521 反素數 打表

problem description 反素數就是滿足對於任意i 0 input 第一行輸入n,接下來n行測試資料 輸入包括a,b,1 a b 5000,表示閉區間 a,b output 輸出為乙個整數,為該區間因子最多的數.如果滿足條件有多個,則輸出其中最小的數.sample input 32 3...

質因數分解(C )(求最小質因數反求最大質因數)

p1075 質因數分解 題目描述 已知正整數nn是兩個不同的質數的乘積,試求出兩者中較大的那個質數。輸入格式 乙個正整數nn。輸出格式 乙個正整數pp,即較大的那個質數。輸入輸出樣例 輸入 21 輸出 7 說明 提示 n 2 10 9 noip 2012 普及組 第一題 直接找最大質因數會超時,所以...

素數表 與 質因數分解

namespace?primens?pp 1?void?init for i i p pp i 2 1?解決 質因數分解 演算法 順搜,逐個測試 輸入 待分解數num,init 的輸出 輸出 質因數個數dp,質因數表d 0dp 1 指數表e 0dp 1 備註 若num maxn 2,可能會將所有大於...