最小公倍數的最大問題

2021-04-12 13:46:46 字數 1221 閱讀 6223

有乙個數x, 0<=x<=1000, 把它拆分成幾個數的和,x1+x2+......xn=x,使得x1,x2,x3.....xn的最小公倍數最大,

要求輸入這個數 x,輸出最小公倍數 s。 

可以通過使用動態規劃來計算

首先容易證明,存在一種達到最大值的拆分方案,使得每個xi最多只有乙個素因子(也就是說xi必然是1,素數或素數的冪),而且不同的xi之間互素(它們的素因子不同)。

然後就可以使用動態規劃來計算。

中第k步是計算出x1,x2,...,xn使得

x1+x2+...+xn = x

x1,x2,...,xn的所有素因子都是前k個素數, (p1=2,p2=3,p3=5,...,pk)

x1,x2,...,xn的最小公倍數最大時的情況.

所以我每步新增乙個新數(使用x+y的情況),必然有這兩個數互素( (x,y)=1 )

為了簡單起見,程式中用了gmp

#include

#include

#define max 10000

mpz_t mul[2][max+1];

mpz_t *muls1;

mpz_t *muls2;

int prime_list[max+1];

int prime_count;

mpz_t t;

void init_prime()}}

for(i=0;i<=max;i++)}}

int main()

mpz_set_ui(mul[0][0],1);

muls1 = mul[0];

muls2 = mul[1];

init_prime();

mpz_init(t);

for(i=0;i0)

}p*=prime_list[i];}}

mpz_set_ui(muls1[1],1);

for(i=1;i<=max;i++)

}for(i=2;i<=max;i++)

}for(i=1;i<=max;i++)

if(c==1)else if(c>1)

}printf("}/n");

}return 0;

}

最大最小公倍數

時間限制 1 sec 記憶體限制 128 mb 提交 125 解決 4 提交 狀態 討論版 題目描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入 每個測試點 輸入檔案 存在多組測試資料。每個測試點的第一行為乙個整數task,表示測試資料的組數。在一組測試資料中 ...

最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9樣例輸出 504資料規模與約定 1 n 106。include include include using namespace...

最大最小公倍數

題目 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n 輸出格式 輸出乙個整數,表示你求得的最小公倍數 樣例輸入 樣例輸出 504注釋 504 9 8 7 資料規模與約定 1 n 106 分析 題目要求涉及貪心演算法,對於個人而言,更像是乙個純數...