日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二次同余方程的解

發(fā)布時間:2024/4/11 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二次同余方程的解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天要討論的問題是解方程,其中是奇質(zhì)數(shù)。

?

引理:

?

證明:由費(fèi)馬小定理,

?

引理:方程有解當(dāng)且僅當(dāng)

?

定理:設(shè)滿足不是模的二次剩余,即無解,那么是二次

?????剩余方程的解。

?

證明:由,前面的等號用二項(xiàng)式定理和,后面的等

???? 號用了費(fèi)馬小定理和是模的二次非剩余。然后

?

???? ?

?

在算法實(shí)現(xiàn)的時候,對的選擇可以隨機(jī),因?yàn)榇蠹s有一半數(shù)是模的二次非剩余,然后快速冪即可。

?

?

題目:http://acm.timus.ru/problem.aspx?space=1&num=1132

?

題意:求二次同余方程的解。

?

代碼:

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> #include <iostream> #include <math.h>using namespace std; typedef long long LL;LL quick_mod(LL a, LL b, LL m) {LL ans = 1;a %= m;while(b){if(b & 1){ans = ans * a % m;b--;}b >>= 1;a = a * a % m;}return ans; }struct T {LL p, d; };LL w;//二次域乘法 T multi_er(T a, T b, LL m) {T ans;ans.p = (a.p * b.p % m + a.d * b.d % m * w % m) % m;ans.d = (a.p * b.d % m + a.d * b.p % m) % m;return ans; }//二次域上快速冪 T power(T a, LL b, LL m) {T ans;ans.p = 1;ans.d = 0;while(b){if(b & 1){ans = multi_er(ans, a, m);b--;}b >>= 1;a = multi_er(a, a, m);}return ans; }//求勒讓德符號 LL Legendre(LL a, LL p) {return quick_mod(a, (p-1)>>1, p); }LL mod(LL a, LL m) {a %= m;if(a < 0) a += m;return a; }LL Solve(LL n,LL p) {if(p == 2) return 1;if (Legendre(n, p) + 1 == p)return -1;LL a = -1, t;while(true){a = rand() % p;t = a * a - n;w = mod(t, p);if(Legendre(w, p) + 1 == p) break;}T tmp;tmp.p = a;tmp.d = 1;T ans = power(tmp, (p + 1)>>1, p);return ans.p; }int main() {int t;scanf("%d", &t);while(t--){int n, p;scanf("%d %d",&n,&p);n %= p;int a = Solve(n, p);if(a == -1){puts("No root");continue;}int b = p - a;if(a > b) swap(a, b);if(a == b)printf("%d\n",a);elseprintf("%d %d\n",a,b);}return 0; }


?

接下來我們來解另一個二次同余方程的解,其中,并且是奇質(zhì)數(shù)。方法如下

?

先求出方程的一個解,那么進(jìn)一步有

?

?????

?

我們知道

?

??????

?

那么也就是說

?

??????

?

可以證明和,那么最終得到

?

???????

?

這里由于不是素數(shù),所以求逆元用擴(kuò)展歐幾里得算法即可。

?

?

例如:求方程的解

?

分析:利用上述方法求得,最終解得。

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的二次同余方程的解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。