剩余类和完全剩余系(简单理解)

最近刚刚学了剩余类和完全剩余系,进行了简单的总结,如果理解错误,欢迎大牛指出!!


剩余类和完全剩余系:


定义1:取定m>0,任意的r∈Z,设r  mod m ={qm+r|q=0,±1,±2,.....}

把r  mod  m  称为模m的一个剩余类,除以m后余数相等的记为一类,同余同类,不同于不同类。(只要取定一个m,那么就可以将所有的整数分为m个剩余类,任意的r只要是对m取模相同,则在同一个剩余类里面)


定理1   取定m>0,则

1)任意的a∈Z,a恰在模m的一个剩余类 r  mod  m,r=0,1,2,....m-1中。(即将所有整数分为m份,放入不同的剩余类中)

2)任意的x,y∈Z,x,y在模m的同一个剩余类(x≡y mod m)

 

特点:由定理1,给定模m,

·任意r,s∈Z,  r mod m =s mod m或 r mod m ∩ s mod m = ∅

·恰有 m 个不同的模m的剩余类 0 mod m,1 mod m......(m-1) mod m。

·Z=∑ i mod m  i∈【0,m-1】。


例子:

设S={a1,a2,....an},其中ai都是整数,证明存在S的一个非空子集,其各个元素的和被n整除。

证:(运用了鹊巢原理)考虑n个整数 S1=a1,S2=a1+a2,...... , Sn=a1+a2+...an,若Si被n整除,则Si符合,若没有是

被n整除(即Si∉0 mod n),那么S1,S2,....,Sn 中必有两数在模 n 的同一个剩余类中,那么这两数只差就是n的倍数。

不妨设 Si≡Sj(mod n),i



定义2:一组数a0,a1,.....,am-1 称为模m 的一个完全剩余系,如果 ai∈i mod m,i=0,1,2,...,m-1。(因为完全剩余系里面两两各不相同)

设 a1,a2,...,am 是模m的一个完全剩余系,则

·如果 ai≡aj(mod m), 就有 i=j,ai=aj 。


常用的完全剩余系

·0,1,.....,m-1称为模m的非负最小完全剩余系

· m 为奇数时,

 -(m-1)/2 , -(m+1)/2 , ... , -1 , 0 , 1 , ... , (m-1)/2

· m为偶数时,

① -m/2, -m/2+1 , ... , -1 , 0 , 1 , ... , m/2-1

-m/2+1 , ... , -1 , 0 , 1 , ... , m/2-1 , m/2

称为模m 的绝对最小完全剩余系。



完全剩余系的判定及构造

定理2 一组数a1,a2 , ... , ak 是模m的一个完全剩余系

{k=m                                                }

{a1 , a2 , ... , ak对模m两两互不同余}


定理3 若a1 , a2 , ... ,am 是模m的一个完全剩余系, 则ka1, ka2,...,kam 也是模

m的一个完全剩余系。


定理4 设(k,m)=1,b∈Z, 若a1,a2, ... , am 是模m的一个完全剩余系,则

 ka1+b , ka2+b , ... , kam+b(运用了定理3,然后都加上b相当于同时全部元素移动了b步)

也是模m的一个完全剩余系。


定理5 设(m1,m2)=1,若x1,x2分别通过模m1,m2的一个完全剩余系,则m1x2+m2x1通过模m1m2的一个完全剩余系。

证:(m1x2+m2x1)%m1m2=x2%m2+x1%m1






附上一道acm题:

Candy Distribution
Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu
Submit  Status

Description

N children standing in circle who are numbered 1 through N clockwise are waiting their candies. Their teacher distributes the candies by in the following way:

First the teacher gives child No.1 and No.2 a candy each. Then he walks clockwise along the circle, skipping one child (child No.3) and giving the next one (child No.4) a candy. And then he goes on his walk, skipping two children (child No.5 and No.6) and giving the next one (child No.7) a candy. And so on.

Now you have to tell the teacher whether all the children will get at least one candy?

Input

The input consists of several data sets, each containing a positive integer N (2 ≤ N ≤ 1,000,000,000).

Output

For each data set the output should be either "YES" or "NO".

Sample Input

2
3 
4

Sample Output

YES
NO
YES


题解是转载别人博客里的。网址:http://blog.csdn.net/tsaid/article/details/7385406


题意:老师给N个学生发糖,第x次发糖发给编号为 f(x) 的学生。可以推知:f(x) = x * (x+1) / 2 % N(学生号为 0, 1, 2, 3, ```N-1 )

现在问你是否每个学生都能得到至少一颗糖。

题解:要使每个学生都至少得到一颗糖,那么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 main()  
{  
    int n;  
    while ( scanf("%d",&n) != EOF )  
    {  
        if ( n & ( n - 1 )) printf("NO\n"); //这个方式判断n是否是2的幂,还是蛮巧妙的。  
        else printf("YES\n");  
    }  
    return 0;  
}  
//没想到那么短……


目前理解到这里= =... 


你可能感兴趣的:(acm,数学)