對於任何正整數x,其約數的個數記作g(x)。例如g(1)=1、g(6)=4。
如果某個正整數x滿足:g(x)>g(i) 0現在給定乙個數n,你能求出不超過n的最大的反質數麼?
乙個數n(1<=n<=2,000,000,000)。
不超過n的最大的反質數。
輸入 #1
1000
輸出 #1
840
思路:菜雞第一次學習反素數,碼點字總結一下
反素數的定義:對於任何正整數,其約數個數記為g(x),例如,如果某個正整數n滿足:對任意的正整x,1性質:
(1)乙個反素數的所有質因子必然是從2開始的連續若干個質數
(2)如果,
上面兩條性質可以這麼理解:比如
ps:int aprime=;
int fact=;
aprime表示反素數,fact表示對應反素數的因子數。可以看出,反素數越大,其對應的因子數越多。(廢話)
所以此題可以利用上述性質,來剪枝
use[i]:=素數p[i]的次方,也就是p[i]用了幾次。
**如下:
#include#include#include#include#include#include#include#include#include#define ll long long
using namespace std;
const int n=1005,mod=1e9+7;
const int inf=0x3f3f3f3f;
int p=;
//2*3*...*31=200560490130
int n=2,use[n];
ll ans,maxn=1;
void dfs(ll id,ll now,ll tot){
//id:第幾個質因數
//now:數的大小
//tot:因子的個數
if(tot>maxn||(tot==maxn&&now學習部落格:dalao1
dalao2
洛谷P1463 反素數
題目大意 給定 n 2e9 求不超過 n 的最大反素數。題解 引理1 不超過 2e9 的數的質因子分解中,最多有 10 個不同的質因子,且各個質因子的指數和不超過30。引理2 題目要求的最大反素數,實際上是求不超過 n 的數中因子數最多的數的集合中最小的那個數。引理3 通過引理 2 以及交換證明法可...
洛谷P1463 反素數 DFS DP
輸出11到nn 中約數個數最多且盡量小的數。如果你很厲害的話可以打出來乙個表。include include using namespace std long long a int n,ans,i intmain 正解是dpd p,如果你鑽研資料範圍的話dfs dfs也可以過。什麼是鑽研資料範圍呢?...
洛谷P1463 反素數 DFS DP
輸出11到nn 中約數個數最多且盡量小的數。如果你很厲害的話可以打出來乙個表。include include using namespace std long long a int n,ans,i intmain 正解是dpd p,如果你鑽研資料範圍的話dfs dfs也可以過。什麼是鑽研資料範圍呢?...