关于px+qy类命题的研究

来源:互联网 发布:普拉达男鞋高仿淘宝店 编辑:程序博客网 时间:2024/05/02 02:30

关于px+qy类命题的研究

 (2007-07-24 12:10)
  • 标签: ACM   分类: 算法_ACM
关于px+qy类命题的研究
华南师大附中
 袁豪
 
 
http://www.csie.ntu.edu.tw/~b93103/study/ioi/pxqy.htm
 

命题1已知(p,q)=1 p≥1,q≥1,求证不能表示为 px+qy,(x≥0,y≥0)的最大整数是pq-p-q。(如无特别说明,这里所有字母都是整数)
证:

首先证明:
pq-p-q不能表示为px+qy的形式
反证法:假设存在
x≥0, y≥0使 pq-p-q = px + qy,则有
   pq-p-q = px + qy
ó
 p(q-x-1)=q(y+1)
ó
 q | q-x-1        (因为 (p,q)=1)
ó
 q | x+1
又因为
 px=pq-p-q-qy <pq 所以 x<q ó x≤q-1
 0≤x≤q-1以及 q | x+1 可以得到:x=q-1
 pq-p-1=px+qy=p(q-1)+qy  ó y=-1 ,这与 y≥0矛盾
pq-p-q不能表示为 px+qy, (x≥0,y≥0)
现在证明:对于 n>pq-p-q,必定存在x≥0y≥0使n=px+qy
考察这样
q个数:
n
n-p
n-2p
n-3p
……
n-(q-1)p

这个
q个数除以q的余数必定构成集合{0,1,2,…,q-1}
否则必存在
0≤i<j≤q-1使 q | (n-ip)-(n-jp) ó q | (j-i)p ó q| j-i
但是
 1≤j-i≤q-1,所以不可能有q| j-i
于是这个
q个数除以q的余数必定构成集合{0,1,2,…,q-1}
如果 n-up (v为整数)除以q的余数为0,设 n-up=vq(0≤u≤q-1) 
由于
 vq=n-up>(pq-p-q)- (q-1)p = -q  ó v>-1 ó v>=0
所以
yvxu即得px+qy=n
证毕。

推论1:已知 (A1,A2,A3,…,As ) = 1 Ai≥1 (1≤i≤s)Ai互不相等,则对于n>∏Ai-∑Ai , 必定存在Xi≥0 (1≤i≤s),使 n=∑AiXi
:可用数学归纳法证明,请同学们自己尝试。(这个推论比较弱)

命题2:已知 (p , q ) = 1 p≥1,q≥1,对于任意非负整数n都能表示为pu + qv, (0≤u≤q-1)
1
:由命题1的证明即可
2
:由于存在整数x,y使 n=px+qy,所以由恒等式:
     n=px+qy=p(x+qt)+q(x-pt)=p(x-qt)+q(x+pt) 
可以调整出符合命题的uv来。

推论2:已知 (p , q ) = 1 p≥1,q≥1,记m=pq-p-q,对于n (0≤n≤m)m-n,其中有且只有一个能表示为 px+qy (x≥0,y≥0)的形式。
:由命题2知 n,m-n可以分别表示为:
  n=px+qy  (0≤x≤q-1)
m-n=pu+qv  (0≤u≤q-1)

相加得
 
   m=p(x+u)+q(y+v)
ó
 pq-p-q=px+u)+q(y+v)
ó
 p(q-1-x-u)=q(y+v+1)
ó
 q|(q-1-x-u)  p|(y+v+1)
q|(q-1-x-u) 
ó q|x+u+1
因为
 1x+u+12q-1 所以 x+u+1=q
 y+v+1=0 在这里我们得到了 xuyv的关系式
如果
yv都小于0,那么 0=1+y+v<=1+(-1)+(-1)=-1,这是不可能的
如果
yv都不小于0,那么 0=1+u+v>=1,这也是不可能的
所以
yv中有一个小于0,有一个不小于0
也就是说
nm-n中有一个能表示为px+qy (x≥0,y≥0)的形式,另一个则不能。
证毕。

推论3已知(p,q)=1 p≥1,q≥1,则不能表示为 px+qy (x≥0,y≥0)的形式的非负整数的数目为(p-1)(q-1)/2
:首先 p,q不同时为偶数,所以pq-p-q+1=(p-1)(p-1)必为偶数
由推论2知:在
[0,pq-p-q]内的pq-p-q+1个整数,按和为pq-p-q配对,共得(pq-p-q+1)/2对,每一对必有一个不能表示为题目所述形式。而对于大于pq-p-q的整数,由命题1知必定能表示为那种形式。所以不能表示为那种形式的非负整数的数目为 (p-1)(q-1)/2 

问题:已知p,q,求n=(p,q),以及 满足px+qy=nx,y
算法
:辗转相处法。
y=(n-px)/q=(n-(p mod q)x)/q-(p div q)x

 y’=x, x’=(n-(p mod q)x)/q=(n-(p mod q)y’)/q
ó
 qx’+(p mod q)y’=n
于是我们可以递归的得到
x’y’
然后得出
 
x=y’
y=x’-(p div q)y’

Pascal程序:
function extended_euclid(p,q:longint; var x,y:longint):longint;
var
  t:longint;
begin
  if q=0 then
  begin
    extended_euclid:=p;
    x:=1; 
    y:=0;
  end else
  begin
    extended_euclid:=extended_euclid(q,p mod q,x,y);
    t:=x;
    x:=y;
    y:=t-p div q*y;
  end;
end;


总结:
这些结论对解一些数论问题有很大的帮助。(废话)