标签: bigint

声明类型 *big.Int 溢出常量 golang

使用 crypto/rsa 包生成密钥对很简单,但自己声明它很痛苦。

我试图声明一个 rsa.PublicKey 类型的变量,它定义为:

type PublicKey struct {
        N *big.Int // modulus
        E int      // public exponent
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一百零三种方法,但我的代码目前看起来像:

PublicKey := new(rsa.PublicKey)

PublicKey.N = 816296297763124917516388440338759500423535395290623239231731567955308683122890408110917894172120047293936355563865250296188045077627313515614945465389856882915690164742049821466713295090362914686221827012330520911241180940331170800129566133563943306086709509374426793735798983196271063876215936717347200817820685489907456621846519078704338901417077754153251584919148131668369473222078960469749879767829241702858598298315759777245767370065542249841401685747514693845945420663931515035586797756896017462499826100826469085345198490755785708882569397123671313993933597159332140624225622926365258472081852103795720495728779491860405409429756519754432759030127289255409541378096471189783136441306888685144178712329637014132885623358066824356187044819578205172698506597932578231190886063535262514544569054747443504586895362356519252402500104155389876467086444850150261677007183689594568339805440756958346151465691221654766132846717117978938197863452998630570321897641091974200100764524637808876854013287571133384735164135339783262769321526997252096927500094807456840263828514476848496064212933462545940124330314474126636272733109787671957872657823289210871868354885730638093964892263227561606744192311648252923260065974092128743259979645799

PublicKey.E = 65537
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

./main.go:21: constant too large: 816296297763124917516388440338759500423535395290623239231731567955308683122890408110917894172120047293936355563865250296188045077627313515614945465389856882915690164742049821466713295090362914686221827012330520911241180940331170800129566133563943306086709509374426793735798983196271063876215936717347200817820685489907456621846519078704338901417077754153251584919148131668369473222078960469749879767829241702858598298315759777245767370065542249841401685747514693845945420663931515035586797756896017462499826100826469085345198490755785708882569397123671313993933597159332140624225622926365258472081852103795720495728779491860405409429756519754432759030127289255409541378096471189783136441306888685144178712329637014132885623358066824356187044819578205172698506597932578231190886063535262514544569054747443504586895362356519252402500104155389876467086444850150261677007183689594568339805440756958346151465691221654766132846717117978938197863452998630570321897641091974200100764524637808876854013287571133384735164135339783262769321526997252096927500094807456840263828514476848496064212933462545940124330314474126636272733109787671957872657823289210871868354885730638093964892263227561606744192311648252923260065974092128743259979645799
./main.go:21: overflow in constant
./main.go:21: cannot use 0 (type int) as type *big.Int in assignment
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

struct rsa go bigint

0
推荐指数
1
解决办法
2096
查看次数

golang中的100阶乘

我想在 golang 中计算 100 阶乘。这是我正在使用的代码。

var fact big.Int
fact.MulRange(1, 100)
Run Code Online (Sandbox Code Playgroud)

打印输出给出

30414093201713378043612608166064768844377641568960512000000000000

但是谷歌搜索100!给出9.332622e+157。我想这可能是因为我使用的数据类型(或者可能不是)。我该如何解决?提前致谢。

编辑:所以我在 go playground 中运行了这段代码,它给出了正确的答案。这是由于我的 PC 上的限制吗?另外,当我将其转换为字符串并对其进行迭代时,它会显示不同的数字

str := fact.String()
for _,val := range str{
    fmt.Print(val)
}
Run Code Online (Sandbox Code Playgroud)

这是所有的代码

package main

import (
    "fmt"
    "math/big"
)

func main() {
    var fact big.Int
    fact.MulRange(1, 100)
    fmt.Println(fact)
    n := fact.String()
    fmt.Println(n) //printing 100!
    sum := 0
    for _, i := range n {
        sum += int(i) //sum of each digits in 100!
    }
    fmt.Println(sum)
}
Run Code Online (Sandbox Code Playgroud)

这是 go env …

string math go bigint

0
推荐指数
1
解决办法
1836
查看次数

如何在 Scala 中将 Int 转换为 BigInt

我有智力

val y = 10
Run Code Online (Sandbox Code Playgroud)

我想投射到 BigInt

y.toBigInt 
Run Code Online (Sandbox Code Playgroud)

它显示错误

<console>:26: error: value toBigInt is not a member of Int
       y.toBigInt
Run Code Online (Sandbox Code Playgroud)

如何将 Int 转换为 BigInt ?

int casting scala bigint

0
推荐指数
1
解决办法
7304
查看次数

8086 asm 中 64 位数字乘以 32 位数字

我什至在启动问题的解决方案时遇到问题。我曾尝试考虑乘法是重复加法算法,但无论我考虑什么算法,我似乎都专注于一个问题——8086 中的最大寄存器大小是 16 位。

data segment
num1 dw 0102h,0304h,0506h,0708h
num2 dw 0102h,0304h
res dw ?,?,?,?,?,?
data ends

code segment
assume CS:CODE, DS:DATA
start:
mov ax,DATA
mov DS,ax
Run Code Online (Sandbox Code Playgroud)

.....填写代码.......

在这一点上,我被卡住了。即使是轻微的代码提示或算法也将不胜感激。

algorithm assembly bigint extended-precision x86-16

0
推荐指数
1
解决办法
639
查看次数

Scala BigDecimal - 精度损失

我需要用大数字做一些精确计算,我一直在尝试使用 Scala,BigDecimal但我注意到精度损失。

举个例子:

2^63 == 9223372036854775808
2^64 == 18446744073709551616
Run Code Online (Sandbox Code Playgroud)

但是当我做

println(BigDecimal.decimal(scala.math.pow(2, 63)).toBigIntExact())
println(BigDecimal.decimal(scala.math.pow(2, 64)).toBigIntExact())
Run Code Online (Sandbox Code Playgroud)

我得到

9223372036854776000 != 9223372036854775808
18446744073709552000 != 18446744073709551616 
Run Code Online (Sandbox Code Playgroud)

我不知道如果我能得到确切的BigInt

也许我必须采取其他方法。

有人可以帮我解决这个问题吗?

math precision scala bigdecimal bigint

0
推荐指数
1
解决办法
50
查看次数

斐波那契任务。BigInt 不同于数字

我正在处理一项看似典型的面试任务 - 通过该数字的指数计算斐波那契数。但是任务的难点是索引可以达到2000000。我遇到了几个问题,我不明白为什么会发生。

先上代码:

function fib(number) {  
  const left = Math.pow((1 + Math.sqrt(5)) / 2, number);
  const right = Math.pow((1 - Math.sqrt(5)) / 2, number);
  const result = Math.round((left - right) / Math.sqrt(5));
  
  console.log(result); // 
  return BigInt(result); // 
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. BigInt 不同于数字
fib(96);
console.log(result) // -> 51680708854858490000
BigInt(result) // 51680708854858489856
Run Code Online (Sandbox Code Playgroud)
  1. 错误的答案。我认为这与之前的问题有关
fib(96);
// Must return 51680708854858323072
// But return BigInt 51680708854858489856
Run Code Online (Sandbox Code Playgroud)

javascript fibonacci bigint

0
推荐指数
1
解决办法
43
查看次数

装配无限数量

我觉得这个问题可能有点蠢。。

由于我们存储位来指示数字,并且由于我们拥有整个 RAM,因此我们应该能够拥有一个无限大小(实际上是自定义大小)的数字,该数字可以占用整个 RAM(或其指定部分) )。

正确的?

例如,如果我们这样做:

mov ax, 0xFFFF
add ax, 1
jc custom_function ; if I remember correctly jc checks the carry flag
Run Code Online (Sandbox Code Playgroud)

custom_function 是一个标签/函数,它具有一种算法来设置下一个位以创建无限大小的数字。

问题

  1. 这可能吗?如果不是无限大小的数字,则指定自定义(比默认值更长或更短)

  2. 我怀疑,如果可能的话,它的性能会很差(即使数量更短)。你怎么认为?

  3. 你认为拥有这样的东西会很好吗?(也许在内存有限的旧系统或嵌入式系统中这会更有效?)

embedded binary assembly numbers bigint

0
推荐指数
1
解决办法
133
查看次数

在 8086 上将两个 32 位数字相乘得到一个 64 位数字(32x32 =&gt; 64 位与 16 位相乘)

我如何将汇编中的两个 32 位数字或一个 32 位与另一个 16 位相乘,有人知道算法吗?

data1 dw 32bit
data2 dw 32bit    
mov ax,data2
Mul data1
Run Code Online (Sandbox Code Playgroud)

assembly multiplication bigint x86-16

-1
推荐指数
1
解决办法
2602
查看次数

Golang:奇怪的大Int行为

所以我是Go的新手,对编程总体上缺乏经验,所以我希望我不会因为提出愚蠢的问题而再次投票.我正在通过项目euler问题和问题25"1000位Fibonacci数字"工作我遇到了似乎奇怪的行为.以下是我编写的导致此行为的代码.

package main

import (
    "fmt"
    "math/big"
)

func main() {
    index := 2
    l := new(big.Int)
    pl := big.NewInt(1)
    i := big.NewInt(1)
    for {
        l = i
        i.Add(i, pl)
        pl = l
        index++
        if len(i.String()) == 1000 {
            break
        }
    }
    fmt.Println(i, "\nindex: ", index)
}
Run Code Online (Sandbox Code Playgroud)

当然,这并没有产生正确的答案所以在确定为什么我发现我无意中发现了一种产生2的幂的简洁方法的过程中.我做了以下更改,这确实产生了正确的结果.

package main

import (
    "fmt"
    "math/big"
)

func main() {
    index := 2
    l := new(big.Int)
    pl := big.NewInt(1)
    i := big.NewInt(1)
    for {
        l.Set(i)
        i.Add(i, pl)
        pl.Set(l)
        index++
        if len(i.String()) == …
Run Code Online (Sandbox Code Playgroud)

biginteger go bigint

-1
推荐指数
1
解决办法
161
查看次数

为什么我不能为BigInteger和int使用equals?

当我尝试比较BigIntegerint:

 BigInteger balance = new BigInteger(out_str.substring(186, 201).trim());
 if (!balance.equals(0)) {...}
Run Code Online (Sandbox Code Playgroud)

我明白了:

不可逆类型'int'和'BigInteger'的对象之间的equals()

java int bigint

-1
推荐指数
1
解决办法
391
查看次数

如何将这种日期字符串转换为sql server的大整数?

好吧,这是多么愚蠢我保持我的日期为字符串

23.12.2012 21:24:31
Run Code Online (Sandbox Code Playgroud)

现在在选择查询中我想将它们转换为BigInt并进行搜索

casted version : "20121223212431"
Run Code Online (Sandbox Code Playgroud)

如下

select * from myTable where cast(datestring as bigint) > 20111223212431 
Run Code Online (Sandbox Code Playgroud)

如何在sql server上将这种字符串转换为BigInt?

编辑 - 为什么此查询无效

    select (convert(datetime,LastMoveTime,104)) as myTime from myTable
where myTime < DATEADD(day,-366,GETDATE())
Run Code Online (Sandbox Code Playgroud)

错误:列名称'myTime'无效.

sql-server casting date bigint

-2
推荐指数
1
解决办法
803
查看次数