poj 3372 完全剩餘系

2021-07-07 07:52:47 字數 1387 閱讀 1154

題意:老師給n個學生發糖,第x次發糖發給編號為 f(x) 的學生。可以推知:f(x) = x * (x+1) / 2 % n(學生號為 0, 1, 2, 3, ```n-1 )

現在問你是否每個學生都能得到至少一顆糖。

題解:還是不太明白,**倒是很短,就是判斷輸入數字n是否為2的冪。

**自要使每個學生都至少得到一顆糖,那麼f(x) 應該構成模n的完全剩餘系。

那麼這個問題的反面就是在什麼情況下,f(x) 不能構成模n的完全剩餘系。

我們知道若存在 x != y, 使得 f(x) = f(y),那麼f(x)邊不能構成模n的完全剩餘系。

若f(x) = f(y), 推出 x * (x+1) / 2 % n = y * (y+1) / 2 % n, 推出 (x+y+1)(x-y) / 2 = 0 % n

這樣可以假設 n^t = (x+y+1)(x-y)/2,於是這個等式成立的條件便是f(x) = f(y)成立的條件。

下面我們具體分析:

首先給出兩個顯而易見的結論:

(1).任意乙個偶數都可以表示成 b * 2^e 的形式(b為奇數)

(2).(x+y+1)與(x-y)中必定乙個是偶數乙個是奇數

假如 n^t = (x+y+1)(x-y)/2

1.若n是奇數,那麼n^t 還是奇數,於是我們一定可以找到適當的x,y,t使得 (x+y+1)(x-y)/2 = n^t,例如令 x = y + 2, 得 y + 3 = n^t,

得 y = n^t - 3。 所以在這種情況下f(x) = f(y),不能構成完全剩餘系。

2.若n是2的冪,令n=2^e, 那麼n^t = 2^(e*t) 為偶數,而(x+y+1)(x-y)/2是奇數,顯然不可能存在x,y,t使得 n^t = (x+y+1)(x-y)/2。所以在這種情況下f(x) != f(y) 可以構成完全剩餘系。

3.若n是形如 b * 2^e 的偶數,那麼 n^t = b^t * 2^(e*t)。

令(x+y+1) = b^t, (x-y)/2 = 2^(e*t)

即(x+y+1) = b^t //一式

(x-y) = 2^(e*t+1) //二式

解一式二式構成的方程組,得到 2x = 2^(e*t+1) + b^t - 1,左右均為偶數,顯然x是有解的,那麼y也是有解的。所以在這種情況下f(x) = f(y),不能構成完全剩餘系。

注意上面的式子並不是一般的式子,我們只是用它們來判斷存在性,由 n^t = (x+y+1)(x-y)/2這一假設引出的,是由結果到原因的推導,並不能隨意的求解。例如 2x = 2^(e*t+1) + b^t - 1,假如一邊是奇數,一邊是偶數,那麼x顯然是無解的。

#include int t;

int main()

return 0;

}

數論 剩餘類 完全剩餘系 縮系 尤拉函式

剩餘類 0 r m 1 m 1 cr r 除m餘r的所有數集合 則c0,c1,c2,cm 1為模m的剩餘類 共有m個 性質1 x z,0 r m 1,x cr cr的定義 x,y cj,0 j m 1,當且僅當x y mod m 完全剩餘系 定義 a0,a1,a2,am 1是模m的一組完全剩餘系 a...

POJ1006 Biorhythms 剩餘定理

從水題開始解題報告。剛開始用一般演算法,從一開始計數判斷。wa了兩次後提交通過。如下 memory 744k time 282ms include using namespace std int main return 0 之後看了一下discuss,認識了剩餘定理。則5544 p 14421 e ...

POJ 1006 與中國剩餘定理

要點 設num為下乙個triple peak出現的時間。則可以得到以下三個等式 num 23 p num 28 e num 33 i 使用暴力列舉法會遇到問題 如當p 23時無法用 得到p,但這裡學到了一種新演算法 中國剩餘定理演算法,可繞過這個問題。中國剩餘定理介紹 孫子算經 中有 物不知數 問題...