1. 程式人生 > >乘法逆元(擴充套件歐幾里得)

乘法逆元(擴充套件歐幾里得)

下面是乘法逆元的一個演算法 

#define low16(x) ((x) & 0xFFFF) 
static unsigned short MulInv(unsigned short x)
{
	unsigned short t0, t1;
	unsigned short q, y;

	if (x <= 1)
		return x;
	t1 = (unsigned short)(0x10001L / x);		/* Since x >= 2, this fits into 16 bits */
	y = 0x10001L % x;
	if (y == 1)                   //如果餘數為1 則找到逆元 
		return low16(1 - t1);

	t0 = 1;
	do
	{
		q = x / y;     
		x = x % y;
		t0 += q * t1;
		if (x == 1)
			return t0;
		q = y / x;
		y = y % x;
		t1 += q * t0;     //   t1=q*t0+ t1
	} while (y != 1);

	return low16(1 - t1);
}


相關推薦

乘法擴充套件

下面是乘法逆元的一個演算法 #define low16(x) ((x) & 0xFFFF) static unsigned short MulInv(unsigned short x) { u

51nod 1256 乘法擴充套件演算法

思路1:把k*M%N=1可以寫成一個不定方程,(k*M)%N=(N*x+1)%N,那麼就是求k*M-N*x=1使得k最小,不定方程利用擴充套件歐幾里得演算法 --------------------------------------------------------

求組合數取模楊輝三角打表 & 求擴充套件、費馬小定理、尤拉定理、線性求法 & Lucas

    在acm競賽中,組合數取模的題目還是經常會見到的,所以這是有必要掌握的一個演算法。我本人就因為這個東西而被坑了很多次了= =之前的部落格也都扯過了,就不多說了,下面進入正題。 (1)楊輝三角求組合數     楊輝三角這個東西應該都不陌生,三角的兩邊始終為一,之後向

乘法擴充套件演算法、二元一次方程、a的n次方取餘

知識點:乘法逆元,逆元的求法,二元一次方程求通解,a的n次方求餘數 一,乘法逆元 乘法逆元的概念類似於倒數(ax=1,a−1=x),不過是在取餘數的情況下的倒數。 如果(a×x)%p=1,則稱x是a模p的逆元。另一種記法:ax=1(modp),即等

乘法擴充套件

逆元的定義 滿足a*k≡1 (mod p)的k值就是a關於p的乘法逆元。 如何求k值 (a,p互質) 可以將a*k≡1 (mod p)轉化為a*k+b*p=1即ax+by=d=gcd(a,b) ax+

淺析擴充套件、類和莫比烏斯反演填坑ing

逆元 扯一點沒有多大用的東西 在數論裡面,我們不把倒數叫做倒數,而叫做逆元(純屬裝逼) 逆元的作用很大,先來看點easy的栗子 某些性質 a+b≡amodp+bmodp(modp)a+b≡amodp+bmodp(modp) a−b≡am

除法取模擴充套件,費馬小定理[數學]

一、除法取模逆元 在演算法設計中,常會遇到求 a/b mod m的計算,當a很大,或者b很大,使得a/b的值無法直接計算的時候,通常採用逆元的方法,化除法為乘法。(逆元的概念在離散數學中 有學習) a

【未完成】除法取模、擴充套件演算法

1.+,-,*都可以直接取模,但是除法不可以(模素數相當於換了數域,因為數域變成了有限域,有限域上沒有除法,要換成乘以逆元)。 2.除法取模要變成乘它的逆元。 a * x MOD m == 1則稱X為A關於模m的乘法逆元,其中a和m必須互素。 3.當m為素數時可以使用

qdu 2017級納新題擴充套件

在你面前撒個嬌 哎呦喵喵喵喵喵 Description   我們一起學貓叫 一起喵喵喵喵喵 在你面前撒個嬌 哎呦喵喵喵喵喵 我的心臟砰砰跳 迷戀上你的壞笑 你不說愛我我就喵喵喵 每當xjy和hqy一起唱起這首歌時,就會吸引好多貓群來聽歌,這天他們又吸

POJ ~ 1061 ~ 青蛙的約會 擴充套件

題解 假設答案為a,其實就是求解:,化為。 對應到中,a = m-n,b = L, c = y-x。x為a,y為k。要求最小的非負整數x。 假設的一組解為(x0,y0),那麼通解為 所以最小

POJ ~ 2115 ~ C Looooops 擴充套件

題解 設答案為x,由題意得,同餘方程 => 。 然後求得最小的非負整數解 x 就是答案。 //#include<bits/stdc++.h> #include<iost

一次同餘式的求解擴充套件

大佬的解釋 題目連結 一次同餘式a*x%n=b的解的存在條件是b整除gcd(a,n)。 #include<cstdio> #include<cstring> #includ

ZOJ-3593 One Person Game擴充套件

題意 座標軸上,一個人想從 AA 點走到 BB 點,每次移動可以向左或向右走 aa 個單位、 bb 個單位或 a+ba+b 個單位,求最少移動多少次。 −231≤A,B<231−231≤A,B

同餘方程擴充套件

#include<cstdio> using namespace std; int x,y; int gcd(int a,int b,int &x,int &y){

Noip2012 Day2 T1 同餘方程擴充套件

題目描述 求關於 x 的同餘方程 ax ≡ 1 (mod b)的最小正整數解。 輸入輸出格式 輸入格式: 輸入只有一行,包含兩個正整數 a, b,用一個空格隔開。 輸出格式: 輸出只有一行,包含一個正整數 x0,即最小正整數解。輸入資料保

hdu 1576 A/B擴充套件

思路:設(A/B)%9973 = K, 則A/B = k + 9973x  (x未知), 因此A = kB + 9973xB, 又A%9973 = n, 所以kB%9973 = n,  故kB = n + 9973y (y未知) 故(k/n)B +(-y/n)*9973 =

洛谷P2054擴充套件

題目描述為了表彰小聯為Samuel星球的探險所做出的貢獻,小聯被邀請參加Samuel星球近距離載人探險活動。由於Samuel星球相當遙遠,科學家們要在飛船中度過相當長的一段時間,小聯提議用撲克牌打發長途旅行中的無聊時間。玩了幾局之後,大家覺得單純玩撲克牌對於像他們這樣的高智商人才來說太簡單了。有人提出了撲克牌

ZOJ ~ 3609 ~ Modular Inverse 擴充套件乘法

題意 求a*x ≡ 1(mod m),求最小的正整數 x ,如果沒有解輸出 “Not Exist”。 思路 求乘法逆元。a*x ≡ 1(mod m)轉化為 ,求最小的正!整數 x 。 #

51Nod 1119 機器人走方格 擴充套件++求組合數

M * N的方格,一個機器人從左上走到右下,只能向右或向下走。有多少種不同的走法?由於方法數量可能很大,只需要輸出Mod 10^9 + 7的結果。 收起 輸入 第1行,2個數M,N,中間用空格隔開。(2 <= m,n <= 1000000) 輸出 輸出走法的數量 Mo

演算法複習——擴充套件演算法擴充套件,整除

①歐幾里得演算法 就是求gcd的有趣的輾轉相除法,不再贅述啦0v0 程式碼: int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } ②擴充套件歐幾里得演算法 需要解決這樣的問題:兩個非0整數a,b