愛好數學的國王 唯一分解定理

2021-09-03 02:10:58 字數 1651 閱讀 6872

題目描述

z 國的國王是乙個非常愛好數學的國王。一天他對著他的那些大臣說:「素數真是一種神奇的正整數,除了1和它本身外,不能被其他任何正整數整除,2是最小的素數,有無窮多個啊……它還有乙個美妙的名字:質數,……數學多麼有趣啊……」。  

z 國今年風調雨順,百姓豐衣足食。為了獎勵他那幫管理有方的大臣,他決定把全部的 n 元獎金平均分配給其中的 k 位大臣,但酷愛數學的國王要求這 k 位大臣每人拿到的獎金必須是個素數。哪個大臣能夠解決這個數學問題,國王就把獎金給這個大臣和另外的 k-1 人。  

大臣們都想自己獲得更多的獎金,所以希望分得獎金的大臣人數 k 越少越好。機智的大臣請來了「程式設計大俠」來幫忙解決這個問題。國王的間諜得知了這個情況後向國王匯報了大臣的行為。國王早就聽說「程式設計大俠」的厲害,於是決定問 t 次這個問題,來試探一下 

「程式設計大俠」的真正實力。

輸入

輸入共t+1行。

第1行乙個整數t,表示國王問了t次。

接下來t行每行乙個整數n,表示國王打算分配給大臣的總獎金。

輸出

輸出共t行。

第i行乙個整數k,表示最少多少位大臣來平分輸入中對應的全部獎金。如果找不到滿足國王要求的分配辦法,請輸出「0」(輸出時不包含雙引號)。

國王共問了 3 次。  

第一次國王說:「我們總共有 3 元獎金」。「程式設計大俠」說:「最少分配給 1 位大臣,他可以獲得所有獎金,即 3 元,因為 3 是乙個素數」。  

第二次國王說:「我們總共有 4 元獎金」。「程式設計大俠」說:「最少分配給 2 位大臣,他們每人可以獲得 2 元獎金,因為 2 是乙個素數」。  

第三次國王說:「我們總共有 100 元獎金」。「程式設計大俠」說:「最少分配給 20 位大臣,他們每人可以獲得 5 元獎金,因為 5 是乙個素數」。

分析:

1.根據國王的問法與分配方法,可以肯出,可以整除的那個最大的素數。

2.根據唯一分解定理,任何乙個大於1的數都可以表示出,幾個連續質數的乘積。

3.所以可以將這個數 的質因數從小到大乘起來,保留他的積,最後用n除以他的積,即為最大的素數。

4.**也增加了乙個輸出,輸出該數的乘積表示 比如120=2*2*2*3*5,用來驗證唯一分解定理。

#include #include #include #include #include using namespace std;

int vis[(int)(1e6+5)];

int prime[(int)(1e6+5)];

int main()

int m,n;

int t;

scanf("%d",&t);

while(t--)

if(n==1)

break;

}for(int i=1;i<=ans;i++)

printf("\n%d\n",z==1?0:m);

}return 0;

}

唯一分解定理

任意乙個大於1的正整數都能表示成若干個質數的乘積,且表示的方法是唯一的。換句話說,乙個數能被唯一地分解成質因數的乘積。因此這個定理又叫做唯一分解定理。c include include include using namespace std int main int num 32 int local...

唯一分解定理

唯一分解定律 又稱為正整數的唯一分解定理,即 每個大於1的自然數均可寫為質數的積,而且這些素因子按大小排列之後,寫法僅有一種方式。當題目有大數相除,求餘數時,精度要求高時.就要運用唯一分解定律 以下唯一分解定律證明 為了真正地證明,分解質因數的方法是唯一的,我們將再次用到反證法。假設存在某些數,它們...

唯一分解定理

problem description 假設x是乙個正整數,它的值不超過65535 即1 x 65535 請編寫乙個程式,將x分解為若干個素數的乘積。input 輸入的第一行含乙個正整數k 1 k 10 表示測試例的個數,後面緊接著k行,每行對應乙個測試例,包含乙個正整數x。output 每個測試例...