数论吧 关注:13,164贴子:73,472
  • 17回复贴,共1

三元一次不定方程非负整数解及正整数解计数一般公式

只看楼主收藏回复

a,b,c,n均为正整数,且a,b,c两两互素
ax+by+cz=n 的非负整数解个数f_n,正整数解个数g_n公式如下。其中i=sqrt(-1)为复数

可以避免复数求和,如g_n中第一个求和对应第k项和第a-k项为共轭复数,可以抵消虚部,

但此公式应用不好,在a,b,c比较大时,人工没法求,计算机求和会有误差,特别是a,b,c数量级相差较大时
求和中分母会出现接近0而导致误差较大的,所以一般利用其规律性使用其他方法求出后面三个求和。


IP属地:北京1楼2024-02-22 09:08回复
    例如最简单的a=1,b=2,c=3,


    IP属地:北京2楼2024-02-22 09:28
    回复
      3x+4y+5z=n的正整数解个数为


      IP属地:北京3楼2024-02-22 09:32
      收起回复
        7x+8y+9z=n的非负数解个数

        代入n=100可得到f100=12,这个表达式就不如直接枚举每个解了,关键是化简求和部分太麻烦而且没有通用技巧。

        这样,还算好求的可以将三个求和的各个周期找出来,就是主楼洋红色的三个求和。
        第一求和其周期为a,第二、三求和周期依次为b,c.
        如本楼对应三个周期的数据如下。

        计算f100时,直接从上表中取数据f100=100*124/1008+767/6048+2/7-11/32-10/27=12.
        枚举这12组解对应(x,y,z)=(0,8,4) (1,6,5) (2,4,6) (3,2,7) (4,0,8) (4,9,0) (5,7,1) (6,5,2) (7,3,3) (8,1,4)(12,2,0) (13,0,1),
        如求解7x+8y+9z=100的正整数解个数g100=f76=76*100/124+767/6048-2/7-11/32-1/27=7
        枚举7组解(x,y,z)=(1,6,5)(2,4,6)(3,2,7)(5,7,1)(6,5,2)(7,3,3)(8,1,4)
        计算f(10^6)时,10^6 mod 7,8,9的结果依次是1,0,1
        f(10^6)=10^6(10^6+24)/1008+767/6048-0+21/32-10/27=992087302


        IP属地:北京4楼2024-02-23 00:58
        收起回复
          鉴于三角函数计算部分过于复杂,所以做一些变换,主要方法是降阶为为多个二元一次不定方程。利用二元一次不定方程的非负整数解公式计算。
          引理:a,b,n为正整数,(a,b)=1, 那么ax+by=n的非负整数解的个数为(n-ax0-by0)/(ab)+1
          其中x0为满足ax=n(mod b) 的最小非负整数解。y0为满足by=n(mod a) 的最小非负整数解。
          证明很简单: 设x=bu+x0,y=av+y0,方程变为 u+v=(n-ax0-by0)/(ab) 的(u,v)的非负整数解个数(n-ax0-by0)/(ab)+1
          这样对于n=cm+r, 其中0≤r<c,方程ax+by+cz=n改变为m+1个二元一次不定方程ax+by=ck+r,其中0≤k≤m.

          求71x+9691y+524604z=5^100的非负整数解的个数。
          5^100 mod (71*9691*524604)=154021003753
          先求71x+9691y+524604z=154021003753
          转变为71x+9691y=524604k+416977,其中0≤k≤m=293594
          i[k]=(3294k+4235) mod 9691, 周期为9691,k从0到m,i[k]遍历了3个周期还剩2864项。
          ∑i[k]=3*9691*9690/2+i[0]+...+i[2864]=1422466942
          j[k]=(30k+12) mod 71, 周期为71,k从0到m,j[k]遍历了4135个周期还剩10项。
          ∑i[k]=4135*71*70/2+12+42+1+31+61+20+ 50+ 9+39+ 69=10275809
          所以对应f(154021003753)=(293594+1)*(524604*293594+2*416977)/(2*71*9691)+293594+1-1422466942/9691-10275809/71=32860401829
          再根据表达式的周期规律可知
          f(5^100)=32860401829+((5^100)*(5^100+534366)-154021003753*154021538119)/721919105688
          =(5^200+534366×5^00+270667942745)/721919105688
          =86201005470419189568050340093136347211402190008210081384897869075376054608346209074773958022584353844032368072447171843546452365;


          IP属地:北京6楼2024-02-23 15:02
          收起回复
            看一下这个余式代数,
            ax+by+cz=n,(a,b,c)互素的正整数个数
            由二元一次方程递推
            ax+by=n-cz
            g(n)=∑(n-cz+ab-aik-bjk)/ab
            =(n+ab)k/ab-ck(k+1)/(2ab)-a(b+1)(k-t1)/(2ab)-(a+1)b(k-t2)/(2ab)-(1/a)*∑it1-(1/b)*∑jt2,令k=(n-r)/c
            则g(n)=(n(n-a-b-c)+R)/(2abc)
            R=(a+b+c-r)r+a(b+1)ct1+(a+1)bct2-2c(a∑it1+b∑jt2)


            IP属地:江苏来自Android客户端7楼2024-02-29 11:49
            收起回复