1. 程式人生 > >G題 又是畢業季

G題 又是畢業季

題目描述
為了把畢業晚會辦得更好,老師想要挑出默契程度最大的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;
}