聖誕節這天,某商店準備了n個禮品盒,分別用整數1-n進行編號。其中,編號為1的盒子中有乙個糖果,編號為2的盒子中有2個糖果,。。。編號為n的盒子中有n個糖果。這天一早,中山幼兒園的k個小朋友一起來到這間商店。作為當天的第一批顧客,這些小朋友可以從這n個禮品盒中選出兩個拿走。小朋友們商量了一會兒後決定,他們拿走的糖果並不一定要多,但是一定要能夠剛好平分給每個人。即拿走的兩個盒子中的糖果總數一定要使k的倍數。現在他們想知道一共有多少種方案可供選擇。
每行兩個正整數n和k,其中1<=n<=109,1<=k<=109。一行n=k=0
表示輸入結束,這一行不用處理。
對輸入中除了n=k=0外的每一行,輸出一行,這一行只有乙個數,即其相對應的輸入所得到的方案數。
1 13 2
5 250 50
0 0014
2420%的資料n<=100;
80%的資料k<=1000;
每個輸入檔案最多有200行輸入資料。
100%: (zlt)
如果有x,y,a,b,x%k == a,y%k == b,a+b == k,則(x+y)%k==0。根據這個特性,我們可以列張表,然後利用乘法原理,一一配對。然而,可以直接被k整除的,要特殊判斷;k為偶數時也要特判斷。
再分情況討論:
1、k為奇數且n%k沒過k一半時
2、k為奇數且n%k過k一半時
3、k為偶數且n%k沒過k一半時
4、k為偶數且n%k過k一半時
;//「+(l+1)*l/2」是因為中間有數,所以把「l*(l-1)/2」做些改動;而「-l*(l-1)/2」是因為實際上這一段是莫得匹配滴;(當然也可以x+=l)
if(t>
0) x+
=(l+1)
*t;//
printf
("%lld\n"
,x);
scanf
("%lld%lld"
,&n,
&k);
}return0;
}不懂的可以去看lyf大佬
jzoj禮物 數論
description n個禮品盒分別用整數1 n進行編號。其中,編號為1的盒子中有乙個糖果,編號為2的盒子中有2個糖果,編號為n的盒子中有n個糖果。問有多少種方案使兩個盒子中的糖果加起來為k的倍數。input 每行兩個正整數n和k,其中1 n 109,1 k 109。一行0 0表示輸入結束,這一行...
jzoj遊戲 規律 數論
description king 很喜歡賭博,這次 king邀請貓老大來玩乙個遊戲。king 拿出了 n 塊 0 input 三行每行乙個數 n 0 output 對於每局,如果 king 必勝則輸出一行 king will win.否則第一行輸出 maolaoda willwin.第二行輸出他第一...
數論 JZOJ 5389 解夢
傳送門 這道題的分析本身不難,但這道題告訴了我們 使用同余時一定要記著分析一番。不難發現,題目中要求的東西實質上就是aa b 1 習慣了直接求模的我直接用了power a,power a,b 1 mod mod,很遺憾,這是錯的。在第一層的指數部分 ab 1 要想化為等價的式子,必須用到一些數論的知...