1. 程式人生 > >【數論】洛谷P1372又是畢業季

【數論】洛谷P1372又是畢業季

自信 blog span 學校 描述 畢業 正整數 題目 如何

題目背景

“叮鈴鈴鈴”,隨著高考最後一科結考鈴聲的敲響,三年青春時光頓時凝固於此刻。畢業的欣喜怎敵那離別的不舍,憧憬著未來仍毋忘逝去的歌。1000多個日夜的歡笑和淚水,全凝聚在畢業晚會上,相信,這一定是一生最難忘的時刻!

題目描述

為了把畢業晚會辦得更好,老師想要挑出默契程度最大的k個人參與畢業晚會彩排。可是如何挑呢?老師列出全班同學的號數1,2,……,n,並且相信k個人的默契程度便是他們的最大公約數(這不是迷信哦~)。這可難為了他,請你幫幫忙吧!

PS:一個數的最大公約數即本身。

輸入輸出格式

輸入格式:

兩個空格分開的正整數n和k。(n>=k>=1)

輸出格式:

一個整數,為最大的默契值。

輸入輸出樣例

輸入樣例#1:
4 2
輸出樣例#1:
2

說明

【題目來源】

lzn原創

【數據範圍】

對於20%的數據,k<=2,n<=1000

對於另30%的數據,k<=10,n<=100

對於100%的數據,k<=1e9,n<=1e9(神犇學校,人數眾多)

題解

小測試掛了寫道水題漲漲自信。。。

不過雖然是水題但是那也是在想明白了思路之後的事。。。

所以簡單說一下思路

首先,若可能的最大公約數為a

取出的k個數為X1,X2,……,Xk且滿足X1<X2<……<Xk

那麽有X1>=a,X2>=2a,……,Xk>=ka

又∵Xk<=n

∴n>=ka,∴a<=n/k

又∵a為整數

∴a<=[n/k]([]為取整符號)。

另一方面,我們取[n/k],2*[n/k],……,k*[n/k]

它們的最大公約數a=[n/k],且它們都小於等於n大於等於1,且互不相等,滿足條件。

∴答案即為[n/k]。

算法復雜度o(1)。。。

對就是o(1)。。。

代碼我都覺得不用貼了。。。但還是貼上吧。。。

代碼如下:

#include<cstdio>

int n,k;

int main()
{
    scanf("%d%d",&n,&k);
    printf("%d",n/k);
    return 0;
}

【數論】洛谷P1372又是畢業季