G題 又是畢業季
阿新 • • 發佈:2019-02-03
題目描述
為了把畢業晚會辦得更好,老師想要挑出默契程度最大的k個人參與畢業晚會彩排。可是如何挑
呢?老師列出全班同學的號數1,2,……,n,並且相信k個人的默契程度便是他們的最大公約數
(這不是迷信哦)。這可難為了他,請你幫幫忙吧!
PS:一個數的最大公約數即本身。
輸入
多組輸入,兩個空格分開的正整數n和k。(n大於等於k,k大於等於1)
輸出
一個整數,為最大的默契值。
輸入樣例
4 2
輸出樣例
2
提示
對於20%的資料,k小於等於2,n小於等於1000
對於另30%的資料,k大於等於10,n小於等於100
對於100%的資料,k小於等於1e9,n小於等於1e9(神犇學校,人數眾多)
解題思路
題目轉換為:求k個有各自編號的數的最大公約數,這些數從1.........n中取。
最大公約數顧名思義就是一個能被所指定的數整除的最大的數
當k=1時,最大公約數就是n
當k=2時,最大公約數是離n最近的能被2整除的數再除以2的那個數
當k=3時,最大公約數是離n最近的能被3整除的數再除以3的那個數(當時的想法就是以此類推,比如900,能被3整除,商是300,因為k=3,當時想到再迴圈一次再除以3商100,但突然想到300*2=600,300 600 900組成的3個數的最大公約數明顯比100大,後來想想900既然能分成3份,拿出其中的2份也能被1份整除,以此類推就寫出這樣的程式碼
原始碼
#include<iostream> using namespace std; int main() { int n,k; int i,j; while(cin>>n>>k) { for(i=n;i>0;i--) if(!(i%k)) { cout<<i/k<<endl; break; } } return 0; }