其實跟反素數沒有什麼關係,就是讓你求區間裡的數的因數的個數最多的那個值,如果有多個符合,取最小。
分解質因數,比如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,可能會將所有大於...