数论概论读书笔记 24.哪些素数可表成两个平方数之和

哪些素数可表成两个平方数之和

定理 p p 是素数,则p是两平方数之和的充要条件是 p1 (mod 4) p ≡ 1   ( m o d   4 ) p=2 p = 2

这里有两个断言

  • 断言A p p 是两平方数之和
  • 断言B p1 (mod 4)

显然,要证明充要性,有两方面

1.若 p p 是两平方数之和,则a2b2(mod p) ,接着对两边取勒让德符号

(1p)(ap)2=(bp)2(1p)=1 ( − 1 p ) ( a p ) 2 = ( b p ) 2 ( − 1 p ) = 1

于是由二次互反律知, p p 模4余1。证毕

2.我们从A2+B2=Mp开始,如果这里 M=1 M = 1 则证明完毕。所以我们考虑 M2 M ≥ 2

费马的想法是,我们用现有的 A,B,M A , B , M ,要是能构造出 a2+b2=mp  mM1 a 2 + b 2 = m p   且   m ≤ M − 1

则迭代下去, m=1 m = 1 时就完成了证明。这种方法称为费马降价法。

但是费马没有给出具体构造的方法。

在说具体的构造方法之前,先看一个恒等式

(u2+v2)(A2+B2)=(uA+vB)2+(vAuB)2 ( u 2 + v 2 ) ( A 2 + B 2 ) = ( u A + v B ) 2 + ( v A − u B ) 2

这个式子很好证明。

下面我们考虑怎么构造费马降价法,过程如下:

img

重复这个过程直到 r=1 r = 1 ,可以证明每迭代一次, p p 的系数至少减半。即迭代次数为log

为了说明上述 Procedure P r o c e d u r e 的正确性,我们要证明5个断言的正确性。

  1. 找出数 A,B A , B 使得 A2+B2=Mp A 2 + B 2 = M p ,且 M<p M < p 。为此,取同余式 x21 (mod p) x 2 ≡ − 1   ( m o d   p ) 的一个解,由二次互反律知,当 p%4=1 p % 4 = 1 时,必定有解 x x 。所以A=x,B=1具有性质 p | A2+B2 p   |   A 2 + B 2 ,而且 M=A2+B2p(p1)2+12p<p M = A 2 + B 2 p ≤ ( p − 1 ) 2 + 1 2 p < p

在降阶程序的第二步,我们选取 u,v u , v 使其满足

uA(mod M), vB(mod M), 12Mu,v12M u ≡ A ( m o d   M ) ,   v ≡ B ( m o d   M ) ,   − 1 2 M ≤ u , v ≤ 1 2 M

于是有
u2+v2A2+B20(mod M) u 2 + v 2 ≡ A 2 + B 2 ≡ 0 ( m o d   M )

u2+v2=rM u 2 + v 2 = r M ,其余四个断言如下:

  1. r1 r ≥ 1
  2. r<M r < M
  3. uA+vB u A + v B 能被 M M 整除
  4. vAuB能被 M M 整除

这四个断言比较容易证明。这里不再给出。

上面求解过程中关键的一步使求解x21 (mod p),可以直接使用二次剩余的板子,也可以使用随机算法。

即随机一个 a[1,p1] a ∈ [ 1 , p − 1 ] ,求解 ba(p1)/4 (mod p) b ≡ a ( p − 1 ) / 4   ( m o d   p ) ,可知 b2(ap) (mod p) b 2 ≡ ( a p )   ( m o d   p ) ,即若选取的 a a 不是p的二次剩余(有一半的概率),则求得的 b b 即为解x

由定理知有两个解 x1,x2 x 1 , x 2 ,且 x1+x2=p x 1 + x 2 = p

//求解x^2 \equiv -1 (mod p)
ll ran(ll n){
    //要保证n%4=1
    assert(n%4==1);
    srand(time(0));
    for(;;){
        ll a=rand()*rand()%(n-1)+1;
        ll b=fast_exp(a,(n-1)/4,n);
        if(b*b%n==n-1) return b<=(n-1)/2 ? b:n-b;
    }
}

img

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值