1. 程式人生 > >Go語言實現大數開方程式

Go語言實現大數開方程式

Go語言的big包實現大數運算,但是有關大整數運算,似乎沒有相應的開方程式。

這裡給出的程式,實現了大整數的開方運算函式。該程式是基於大整數開方運算的演算法實現的。

Go語言程式:

// bigintsqrt project main.go
package main

import (
	"fmt"
	"math"
	"math/big"
)

func main() {
	v := uint64(123456789012345678)
	sqrtv := uint64(math.Sqrt(float64(v)))
	fmt.Printf("%d : %d\n", v, sqrtv)

	s := "123456789012345678"
	v1 := sqrt(s)
	fmt.Printf("%s : %v\n", s, v1)

	s = "100000000000000000000"
	v1 = sqrt(s)
	fmt.Printf("%s : %v\n", s, v1)
}

// 計算大整數開方函式
func sqrt(s string) *big.Int {
	var n, a, b, m, m2 big.Int

	n.SetString(s, 10)

	a.SetInt64(int64(1))
	b.Set(&n)

	for {
		m.Add(&a, &b).Div(&m, big.NewInt(2))

		if m.Cmp(&a) == 0 || m.Cmp(&b) == 0 {
			break
		}

		m2.Mul(&m, &m)
		if m2.Cmp(&n) > 0 {
			b.Set(&m)
		} else {
			a.Set(&m)
		}
	}

	return &m
}


運算結果:

123456789012345678 : 351364182
123456789012345678 : 351364182
100000000000000000000 : 10000000000


程式說明:程式中給出了不同計算方法的結果,目的是便於比較計算結果的正確性。

相關推薦

Go語言實現大數開方程式

Go語言的big包實現大數運算,但是有關大整數運算,似乎沒有相應的開方程式。 這裡給出的程式,實現了大整數的開方運算函式。該程式是基於大整數開方運算的演算法實現的。 Go語言程式: // bigintsqrt project main.go package main i

Go語言實現的素數篩選程式

通過這個例子可以瞭解陣列的定義及其使用、切片的定義及其使用。同時,也可以瞭解變數的定義,各種控制語句的使用,型別的轉換等。 這裡給出的程式,計算1000以內的所有素數,輸出的每一行是序號+素數。 Go語言程式: // prime project main.go pack

圖解Go語言的context瞭解程式語言核心實現原始碼

基礎築基 基於執行緒的程式語言中的一些設計 ThreadGroup ThreadGroup是基於執行緒併發的程式語言中常用的一個概念,當一個執行緒派生出一個子執行緒後通常會加入父執行緒的執行緒組(未指定執行緒組的情況下)中, 最後可以通過ThreadGroup來控制一組執行緒的退出等操作, 然後在go語言

【區塊鏈Go語言實現】第一部分:區塊鏈基本原型

ont 構建 獲得 列表 append 檢查 世紀 正常 私有 0x00 介紹 區塊鏈(Blockchain)是21世紀最具革命性的技術之一,目前它仍處於逐漸成熟階段,且其發展潛力尚未被完全意識到。從本質上講,區塊鏈只是一種記錄的分布式數據庫。但它之所以獨特,是因為它並

go語言實現 tcp客戶端/服務端

tcpl sem close byte cpc cep 實現 lee n) / server.go /package main import ("bufio""fmt""net""time")

go語言實現udp客戶端/服務端

rom client nic exit nil 客戶 ddr close udp / server.go /package main import ("fmt""net""os") func checkError

go語言實現unix domain socket 客戶端/服務端

sock domain tin soc reader ted ips for urn /*server.go */package mainimport ( "bufio" "fmt" &quo

go語言實現簡單的聊天室

tcp協議 golang聊天室通常聊天室的架構分為服務器端和客戶端: 服務器端:接受來自於客戶端的連接請求並建立連接;所有客戶端的連接會放進連接池中,用於廣播消息; 客戶端:連接服務器;向服務器發送消息;接收服務器的廣播消息; 註意事項:某一個客戶端斷開連接後需要從連接池中摘除,並不再接收廣播消息;某一個客戶

go語言實現數組去重

bsp clas == 實現 int list div append func import ( "fmt" ) func main() { a := []int{2, 1, 2, 5, 6, 3, 4, 5, 2, 3, 9} z := Rm_

Go語言實現FastDFS分布式存儲系統WebAPI網關

net [] ima 分布式存 make type go web upload listen 前言   工作需要,第一次使用 Go 來實戰項目。   需求:采用 golang 實現一個 webapi 的中轉網關,將一些資源文件通過 http 協議上傳至 FastDFS

go語言實現類似java8的Stream

4.4 代碼 歸納 Go語言 浮點 print jdk 是我 遞歸 JDK8 Stream 是一個支持泛型和函數式數據流,使用起來非常強大方便。最近在學習 go 語言我就用 go 模仿了一下類似的功能,由於 go 對泛型、函數式的支持比較有限,感覺泛型和函數式這一塊實現起來

Go語言實現區塊鏈與加密貨幣-Part3(交易優化,單機模擬多節點通訊)

交易(二) 在這個系列文章的一開始,我們就提到了,區塊鏈是一個分散式資料庫。不過在之前的文章中,我們選擇性地跳過了“分散式”這個部分,而是將注意力都放到了“資料庫”部分。到目前為止,我們幾乎已經實現了一個區塊鏈資料庫的所有元素。今天,我們將會分析之前跳過的一些機制。而在本篇文章中,我們將

Go語言實現區塊鏈與加密貨幣-Part2(交易與地址,餘額翻倍漏洞)

準備工作: 安裝依賴包:$ go get golang.org/x/crypto/ripemd160 安裝失敗請檢視:https://blog.csdn.net/ak47000gb/article/details/79561358 交易 交易(transaction)是比特幣

Go語言實現區塊鏈與加密貨幣(用3臺計算機通過區域網模擬3個節點通訊)

本文要實現3臺計算機通過區域網模擬3個節點通訊。(windows環境下) 這是在上一步的基礎上修改而來的。 三個節點所扮演的角色分別是:中心節點、錢包節點、礦工節點 首先3臺計算機要通過區域網連線在一起(可以通過wifi等方式)。 注意要把各自的防火牆關掉。 可以用ping命令測試,互相間的

Go語言實現走迷宮

package main import ( "fmt" "os/exec" "os" "time" ) //定義全域性變數 var( //定義變數儲存R當前位置 currentRow = 1 currentCol = 1 //定義變數儲存迷宮出口位置(索引) endRow =

把二元查詢樹轉變成排序的雙向連結串列 Go 語言實現

題目: 輸入一棵二元查詢樹,將該二元查詢樹轉換成一個排序的雙向連結串列。 要求不能建立任何新的結點,只調整指標的指向。       10      /   \     6  14 &

go語言實現聊天室

go語言實現聊天室 聊天室分為服務端和客戶端。第一部分為服務端程式碼,第二部分為客戶端程式碼。 一、服務端程式碼 //chatroom server package main import ( "fmt" "net" ) //定義函式checkError,用來錯誤處理 fu

go語言實現非對稱加密——RSA加密解密的實現

版權宣告:本文為作者原創,如需轉載,請註明出處 https://blog.csdn.net/weixin_42940826 非對稱加密簡介 什麼是非對稱加密 非對稱加密,顧名思義,是相對於對稱加密的一種加密方法,對稱加密是指加密與解密使用的是同一把祕鑰,而非對稱加

基於Python語言實現的購物車程式<入門小白>

1.需求: 1:啟動程式後,讓使用者輸入工資,然後列印商品列表 2:允許使用者根據商品編號購買商品 3:使用者選擇商品後,檢測餘額是否夠,夠就直接付款,不夠就提醒 4:可隨時推出,推出時,列印已購買商品和餘額 2.程式碼如下: __author__ = "B J" pro

Go語言基礎(十五)—— Go語言實現json資料檔案讀取與儲存

案例: package main import ( "os" "fmt" "encoding/json" "time" ) type Person2 struct { Name string Age int Sex string Hobby []string } fun