兔子吃什么| 脸色发黑是什么病的前兆| 庙祝是什么意思| 梦见背小孩是什么意思| 气管炎吃什么药最有效| 89年的属什么| 什么泡水喝降甘油三酯| 属鸡与什么属相最配| 量化是什么意思| 补办结婚证需要什么手续| 闹心是什么意思啊| 吕布为什么叫三姓家奴| 郭敬明为什么叫小四| 灌肠是什么意思| 吃什么增强抵抗力和免疫力| dha不能和什么一起吃| 备孕吃什么好| 什么树木| 一什么扇子| 吃红萝卜有什么好处| 48岁属什么生肖| 句号代表什么意思| 游手好闲是什么意思| 葱长什么样| 什么东西最刮油减肥| 早上口苦是什么原因| 好景不长是什么意思| 1级高血压是什么意思| 什么是代理| 至加秦是什么字| 喝劲酒有什么好处| 龟裂是什么意思| 什么宽带网速快又便宜| 血压高吃什么菜和水果能降血压| 玉米淀粉是什么| 谢霆锋什么学历| 高血压能喝什么饮料| 尿酸高吃什么药降尿酸效果好| 退行性改变是什么意思| 烫伤涂什么| 一票制什么意思| 水军是什么意思| 5月份什么星座| 谁也不知道下一秒会发生什么| 臭虫怕什么东西| 芥子是什么| 生化是检查什么的| 户籍地址是什么| 什么是集成灶| 来曲唑片是什么药| 感冒发烧吃什么好| 托班是什么意思| 品牌是什么| 泌乳是什么意思| ny是什么牌子| 牛肉与什么食物相克| 僵尸车是什么意思| 戒指丢了暗示着什么| 羊下面是什么生肖| 腊肉炒什么菜好吃| 女人梦到地震预示什么| 硌得慌是什么意思| 检查血压挂什么科| dumpling是什么意思| atp是什么意思| 男人早泄吃什么药| 拍肺部片子挂什么科| cps什么意思| 乌冬面是什么做的| 左腰疼痛是什么原因男性| 减肥吃什么油| 乘字五行属什么| 河蚌吃什么| 免疫固定电泳查什么的| 小恙是什么意思| 为什么会吐| 补肾壮阳吃什么| 胰腺炎挂什么科| 颈椎反弓是什么意思| 交警罚款不交有什么后果| 计抛是什么意思| 各自安好是什么意思| 胸痛是什么情况| 梦见娃娃是什么意思| 尿白细胞定量高是什么意思| 什么菜好消化| 211大学什么意思| 主治医生是什么级别| 经常拉肚子是什么原因引起的| 单纯疱疹病毒吃什么药| ch是什么意思| 国家副主席是什么级别| 西装外套配什么裤子| 狗属于什么科| 绝对值是什么| 祎字五行属什么| 舌头溃疡吃什么药最好| 舌头涩是什么原因| 膀胱壁毛糙是什么意思| 国家专项是什么意思| 降钙素是查什么的| 提肛运动有什么好处| 什么少年| 什么而不| tap是什么意思| 新斯的明是什么药| 女生为什么会肾虚| 丹毒用什么药膏| 职称是什么| 囟门是什么意思| 育婴员是做什么的| 吃什么能长头发| 梦见自己洗澡是什么意思| 网织红细胞高说明什么| 佛珠生菇讲述什么道理| 见字五行属什么| 发烧输液输的是什么药| 雾是什么| 下肢浮肿是什么原因引起的| 膝关节退行性变是什么意思| 牙齿酸软是什么原因| 为什么喉咙经常痛| bae是什么意思| 脾疼是什么原因| 鸽子炖什么补气血| 双侧腋下见淋巴结什么意思| george是什么牌子| 梦见捡钱是什么预兆| 2月6号是什么星座| 葳是什么意思| 白发吃什么维生素| 孩子容易出汗是什么原因| 邪教是什么| 百合和拉拉有什么区别| 舌头疼吃什么药好得快| 皮癣是什么原因引起的| 乔顿男装属于什么档次| 开水冲鸡蛋有什么好处| 拉大便出血是什么原因| 养猫需要准备什么东西| 蛋白酶是什么东西| 孩子手抖是什么原因| 腹部胀疼是什么原因| 无名指下面的竖线代表什么| 嫩绿的什么| 女同什么意思| VA什么意思| 上海新华医院擅长什么| 术前八项检查是什么| 椰子水是什么味道| 韬的意思是什么| 吃红薯有什么好处| 今年27岁属什么生肖| 口臭去医院挂什么科室看病| 女男是什么字| 尿潜血是什么原因| 不想吃饭吃什么药| 985大学什么意思| 颈静脉怒张见于什么病| 什么是豹子号| 仙人掌有什么作用| 梦到棺材什么意思| 英语专八是什么水平| 电信诈骗是什么意思| 大便干燥拉不出来是什么原因| 郑五行属什么| 爱是什么词| 功成名就是什么意思| mds医学上是什么意思| 胆酷醇高有什么危害| 早上起来眼睛肿了是什么原因| 什么不可| 鸡飞狗跳是什么意思| 隐性梅毒是什么意思| 松绿色是什么颜色| 贫血用什么药补血最快| 葵瓜子吃多了有什么危害| 什么是肌无力| 小厨宝是什么东西| 广菜是什么菜| 什么时候开始暑伏| 人贫血吃什么补得快| 县公安局局长是什么级别| 恶病质是什么意思| 蜗牛有什么特点| 韭菜补什么| 眼下长斑是什么原因| 樱花什么时候开花| 治疗风湿有什么好方法| 黄五行属性是什么| 晰字五行属什么| 风疹是什么症状| 中药饮片是什么| 鸡胗是鸡的什么部位| hpv检查前需要注意什么| 枸杞加红枣泡水喝有什么功效| 纯是什么意思| 血清胃功能检测是什么| 白细胞偏低是什么原因| 什么是abo文| 精索炎吃什么药最好| 玫瑰花茶有什么作用| 鸩杀是什么意思| 香茅是什么| rbc是什么意思医学| 冲正什么意思| 容易口腔溃疡什么原因| 狗狗耳螨用什么药| 御守是什么| absolue是兰蔻的什么产品| 为什么姨妈迟迟不来| 纵隔肿瘤是什么病| 为什么一吹空调就鼻塞| 888红包代表什么意思| yair是什么牌子的空调| 售馨是什么意思| 马克定食是什么意思| 腿抽筋吃什么药最好| 眼睛发蓝是什么原因| 籍贯指的是什么| 紫癜是什么原因引起的| 喉咙痛买什么药| 小孩磨牙是什么原因引起的| 梦见已故的父母是什么兆头| 怎么看微信好友什么时候加的| 肝腹水是什么症状| 舌头不舒服挂什么科| 三伏是什么时候| 什么原因导致性功能减退| 辛辣的辛指什么| 味精是什么提炼出来的| 阴虚火旺吃什么调理| 工程院院士是什么级别| 洗银水是什么成分| 女性检查生育挂什么科| 鸭锁骨是什么部位| 杀马特什么意思| 或字多两撇是什么字| 葡萄又什么又什么| 三月十五是什么星座| 胃反酸水吃什么药| 男的纹般若有什么寓意| 7月31日是什么星座| 喝什么茶减肥最有效| aurora是什么牌子| 什么渐渐什么| 婊子是什么| 旺五行属什么| 白天尿少晚上尿多什么原因| 女人梦见蛇缠身是什么预兆| 四肢发麻是什么原因| 卡地亚手表什么档次| 银红色是什么颜色| 制片人是干什么的| au585是什么金| 88年属龙的是什么命| 为什么牙缝里的东西很臭| 脑血栓适合吃什么水果| 月经期适合做什么运动| 胎次是什么意思| 频繁打哈欠是什么原因| 中书舍人是什么官职| amy什么意思| 血清高是什么原因| 百度Vai al contenuto

老外华强北买苹果零件:2000块钱组装最便宜iPhone6s

Da Wikipedia, l'enciclopedia libera.
百度 敌人将大炮搬上山,向薛家寨炮击了6天。

L'algoritmo di Euclide è un algoritmo per trovare il massimo comune divisore (indicato di seguito con MCD) tra due numeri interi. è uno degli algoritmi più antichi conosciuti, essendo presente negli Elementi di Euclide[1] intorno al 300 a.C.; tuttavia, probabilmente l'algoritmo non è stato scoperto da Euclide, ma potrebbe essere stato conosciuto anche 200 anni prima. Certamente era conosciuto da Eudosso di Cnido intorno al 375 a.C.; Aristotele (intorno al 330 a.C.) ne ha fatto cenno ne I topici, 158b, 29-35. L'algoritmo non richiede la fattorizzazione dei due interi.

Dati due numeri naturali e , l'algoritmo prevede che si controlli se è zero. Se lo è, è il MCD. Se non lo è, si deve dividere e definire come il resto della divisione (operazione indicata con "a modulo b" più sotto). Se allora si può affermare che è il MCD cercato, altrimenti occorre assegnare e e ripetere nuovamente la divisione. L'algoritmo può essere espresso in modo naturale utilizzando la ricorsione in coda.

Tenendo nota dei quozienti ottenuti durante lo svolgimento dell'algoritmo, si possono determinare due interi e tali che . Questo è noto con il nome di algoritmo di Euclide esteso.

Questi algoritmi possono essere usati, oltre che con i numeri interi, in ogni contesto in cui è possibile eseguire l'operazione di divisione con resto. Ad esempio, l'algoritmo funziona per i polinomi ad una indeterminata su un campo K, o polinomi omogenei a due indeterminate su un campo, o gli interi gaussiani. Un oggetto algebrico in cui è possibile eseguire la divisione col resto è chiamato anello euclideo.

Euclide originariamente formulò il problema geometricamente, per trovare una "misura" comune per la lunghezza di due segmenti, e il suo algoritmo procedeva sottraendo ripetutamente il più corto dal più lungo. Questo procedimento è equivalente alla implementazione seguente, che è molto meno efficiente del metodo indicato sopra.

Una scrittura in pseudocodice dell'algoritmo (in cui ?mod? indica il resto della divisione intera) è la seguente[2]:

inizia
    leggi (a, b)
    finché b > 0 fai:
        r <- mod(a, b)
        a <- b
        b <- r
    fine ciclo
    scrivi (a, "è il massimo comun divisore cercato")
finisci.

Dimostrazione della correttezza dell'algoritmo

[modifica | modifica wikitesto]

Siano e interi positivi assegnati, e sia il loro MCD. Definiamo la successione di ricorrenza corrispondente ai passi dell'algoritmo di Euclide: , , , e è il resto della divisione di per , cioè . Per definizione di resto nella divisione, per ogni , quindi la successione dei è strettamente decrescente, e quindi esiste un tale che . Vogliamo dimostrare che . Infatti, per induzione si ha per ogni che . Inoltre, sempre per induzione, divide per ogni , quindi divide anche per ogni , quindi .

Tempo di calcolo

[modifica | modifica wikitesto]

Quando si analizza il tempo di calcolo dell'algoritmo di Euclide, si trova che i valori di input che richiedono il maggior numero di divisioni sono due successivi numeri di Fibonacci, e il caso peggiore richiede O(n) divisioni, dove è il numero di cifre nell'input. Occorre anche notare che le divisioni non sono operazioni atomiche (se i numeri sono più grandi della dimensione naturale delle operazioni aritmetiche del computer), visto che la dimensione degli operandi può essere di cifre. Allora il tempo di calcolo reale è quindi .

Questo tempo è comunque considerevolmente migliore rispetto all'algoritmo euclideo originale, in cui l'operazione di modulo è effettuata mediante ripetute sottrazioni in passi. Di conseguenza, questa versione dell'algoritmo richiede un tempo pari a per numeri con cifre, o per il numero .

L'algoritmo di Euclide è ampiamente usato nella pratica, specialmente per numeri piccoli, grazie alla sua semplicità. Un algoritmo alternativo, l'algoritmo del MCD binario, utilizza la rappresentazione binaria dei computer per evitare le divisioni e quindi aumentare l'efficienza, sebbene anch'esso sia dell'ordine di : infatti su molte macchine reali permette di diminuire le costanti nascoste nella notazione "O grande".

Frazioni continue

[modifica | modifica wikitesto]

I quozienti che compaiono quando l'algoritmo euclideo viene applicato ai valori di input e sono proprio i numeri che compaiono nella rappresentazione in frazione continua della frazione . Si prenda l'esempio di e usato prima. Questi sono i calcoli con i quozienti in evidenza:

Da questo elenco si può vedere che

.

Questo metodo può anche essere usato per valori di e reali; se è irrazionale allora l'algoritmo euclideo non ha termine, ma la sequenza di quozienti che si calcola costituisce sempre la rappresentazione (ora infinita) di in frazione continua.

C e C++ (algoritmo iterativo)

/* Algoritmo iterativo */
int euclide(int a, int b)
{
    int r; // resto della divisione
    while(b != 0) //ripete finché non riduce b a zero
    {
         r = a % b; // in r salva il resto della divisione tra a e b
         a = b; // scambia il ruolo di a e b
         b = r; // in b ora c'è r = a % b
    }
    return a; //... e quando b è (o è diventato) 0, il risultato è in a
}

C e C++ (algoritmo ricorsivo)

/* Algoritmo ricorsivo */
int euclide(int a, int b)
{
    if(b == 0)
        return(a);
    else
        return euclide(b, a % b); // la funzione richiama sé stessa
}

Scala (algoritmo ricorsivo)

@tailrec
def euclide(a: Int, b: Int): Int =
    if (b == 0)
      a
    else
      euclide(b, a % b)

MATLAB (algoritmo iterativo)

function out = euclide(a, b)
    if(b == 0)
        out = a;
    elseif(b == 1)
        out = 1;
    else
        out = euclide(b, mod(a,b));
    end
    
end

Python (algoritmo iterativo)

def euclide(a, b):
    while b:
        a, b = b, a % b
    return a

Ruby (algoritmo iterativo)

def euclide(a, b)
  while b != 0 do
    a, b = b, a % b
  end
  a
end

Pascal (algoritmo iterativo)

function euclide(a, b: integer): integer;
var
    r: integer;
begin
    if b = 0 then 
        MCD := a
    else 
    begin
        r := (a mod b);
        while not (r = 0) do
        begin  
            a := b;
            b := r;
            r := (a mod b);
        end;
        MCD := b;
    end;
end;

BASIC (vb.net, algoritmo iterativo)

Function Euclide(ByVal a As Int16, ByVal b As Int16) As Int16
    Dim r As Int16 = a Mod b

    While (r <> 0)
        a = b
        b = r
        r = a Mod b
    Wend

    Return b
End Function

In questo algoritmo è stato usato per la rappresentazione numerica il tipo "int16", ma può essere cambiato a piacimento con qualsiasi altro tipo di variabile numerica secondo i bisogni del programma.

PHP (algoritmo iterativo)

function euclide($a, $b) {
    while ($b) {
        list($a, $b) = array($b, $a % $b);
    }
    return $a;
}

Java (algoritmo iterativo)

private static int euclide(int a, int b) {
    int r;
    while (b != 0) {
        r = a % b;
        a = b;
        b = r;
    }
    return Math.abs(a);
}

Rust[3] (algoritmo iterativo)

fn euclide(mut a: u64, mut b: u64) -> u64 {
    assert! (a != 0 && b != 0);
    while b != 0 {
        let r = a % b;
        a = b;
        b = r;
    }
    a
}

Go (algoritmo iterativo)

func euclide(a, b int) int {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}
  1. ^ F. Acerbi, Euclide, Tutte le opere, 2007, Bompiani. (EN) Thomas L. Heath, The Thirteen Books of Euclid's Elements, 2nd ed. [Facsimile. Original publication: Cambridge University Press, 1925], 1956, Dover Publications
  2. ^ Euclide, algoritmo di - Treccani, su Treccani. URL consultato il 27 dicembre 2023.
  3. ^ (EN) Programming Rust, su GitHub. URL consultato il 6 gennaio 2023.
  • Donald Knuth., Charles E. Leiserson, Ronald L. Rivest, e Clifford Stein, Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Section 31.2: Greatest common divisor, pp. 856–862.

Voci correlate

[modifica | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
Controllo di autoritàGND (DE4659898-4
  Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica
什么阳地名 吃什么会变胖 90年出生属什么生肖 月经血是黑色的是什么原因 核子是什么
为什么硬起来有点疼 跑龙套是什么意思 3月5日是什么星座 眼底出血是什么原因 阿尔兹海默症吃什么药
供是什么意思 六十岁叫什么之年 四肢肌力5级什么意思 飞蚊症滴什么眼药水 幼儿园转园需要什么手续
失眠吃什么 屁股长痘痘是什么原因 老头疼是什么原因导致的 植物神经紊乱吃什么中成药 史努比是什么品牌
mf是什么hcv8jop2ns6r.cn 癫痫患者不能吃什么hcv8jop5ns9r.cn 鼻子无故出血什么原因hcv8jop4ns8r.cn 泸沽湖在什么地方hcv8jop1ns6r.cn 屙是什么意思hcv9jop7ns1r.cn
梦到血是什么意思hcv9jop5ns8r.cn 血小板低有什么症状hcv8jop8ns7r.cn 口若悬河是指什么生肖hebeidezhi.com 静脉曲张 看什么科chuanglingweilai.com 角是什么生肖hcv7jop5ns6r.cn
血管很明显是什么原因hcv9jop6ns3r.cn 蓝莓是什么颜色ff14chat.com 过是什么结构的字hcv9jop3ns0r.cn 什么是企业年金tiangongnft.com 带状疱疹后遗神经痛挂什么科hcv7jop6ns1r.cn
吃炒黄豆有什么好处和坏处hcv7jop5ns1r.cn 贫血喝什么口服液最好hcv9jop3ns7r.cn 口我什么意思hcv9jop7ns0r.cn 树脂材料是什么hcv9jop5ns2r.cn 薄谷开来为什么杀人hcv9jop6ns3r.cn
百度