标签: biginteger

Java BigInteger,切断了最后一位数字

相当容易,如果BigInteger数字是543,我希望它切断最后一位数,使其为54.

两种简单的方法可以是:

  1. 使用字符串,获取子字符串并使用新值创建新的biginteger.
  2. 使用数字10的BigIntegers除法.(543/10 = 54.3 => 54)

事情是,我将这个表演了很多具有当然的大整数的时候.

我的猜测是,用字符串来玩会慢一些,但是我又没有那么多地使用Bigintegers,也不知道"除法"操作有多昂贵.

速度在这里是必不可少的,实现这个的最快方法是什么(内存只是速度没问题)?

其他解决方案也欢迎.

java optimization performance biginteger

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

C#如何在这个Lambda表达式中使用BigInteger?

var totalCost = Persons.Sum(x => BigInteger.Parse(x.cost.First(kv => kv.Key == "volvo").Value))

错误:
无法将lambda表达式转换为委托类型' System.Func< Persons,int >',因为块中的某些返回类型不能隐式转换为委托返回类型.
无法隐式将类型' System.Numerics.BigInteger' 转换为' int'.存在显式转换(您是否错过了演员?)

我用它OrderByDescending并且它工作正常.我能理解错误.我只是不知道要替换什么来Sum使它工作.

如何正确使用BigInteger该声明?

c# lambda biginteger

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

计算大整数Java的幂时的无限循环

我一直在盯着这个代码而无法弄清楚它有什么问题,也许一副新鲜的眼睛可能有所帮助.

public static BigInteger powerOfBigInteger (BigInteger base, BigInteger power){
    if (power == BigInteger.valueOf(0)){
        return BigInteger.valueOf(1);
    }

    if (power == BigInteger.valueOf(1)){
        return base;
    }

    BigInteger x = BigInteger.valueOf(1);
    while (x != power ){
        base.multiply(base);
        x.add(BigInteger.valueOf(1));
        System.out.println(x + " " + power);
                   return base;
    } 

    return base;
Run Code Online (Sandbox Code Playgroud)

我跑了这个,显然x永远不等于力量.任何帮助表示赞赏.

java biginteger exponent

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

Java的SHA-256有时会返回255位

当我使用Java MessageDigest来计算a的SHA-256哈希时,我遇到了一些奇怪的行为BigInteger.看来有时哈希值有256位,但有时它只有255位.这是我用来测试BigInteger散列​​的代码:

@Test
public void testSHA256LengthConsistent() {
    MessageDigest sha256 = null;
    try {
        sha256 = MessageDigest.getInstance("SHA-256");
    } catch (NoSuchAlgorithmException e) {
        Assert.fail("NoSuchAlgorithmException. Can't construct the MessageDigest.");
    }
    BigInteger[] tests = {new BigInteger("15902493"), new BigInteger("5189087324092341824"), new BigInteger("7153293421609183203421127438153268")};
    for(BigInteger testNum : tests) {
        byte[] hash = sha256.digest(testNum.toByteArray());
        Assert.assertEquals(32, hash.length); //256 bits is 32 bytes
        BigInteger hashedInt = new BigInteger(1, hash);
        Assert.assertEquals(256, hashedInt.bitLength());
    }
}
Run Code Online (Sandbox Code Playgroud)

(是的,我正在使用JUnit 4).此测试在第三个测试编号上失败,其中第二个断言失败并显示"预期256但是为255".

我将BigIntegers转换为字节数组的方式有什么问题吗?我可以为Java的MessageDigest找到的所有示例都使用它来散列字符串,而不是BigIntegers,所以我不知道是否有一种"标准"方式将BigIntegers与MessageDigest一起使用.或者,这是Java执行SHA-256的方式的错误或边缘情况,并且有一些东西与7153293421609183203421127438153268(我随机生成的数字)导致散列中的一个一个错误?

顺便说一句,我已经尝试将哈希转换为负BigInteger(使用new BigInteger(-1, hash))以查看它是否与符号位有问题,但我得到完全相同的结果.

java hash biginteger sha

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

1/BigInteger in c#

我要实现

BigInteger.ModPow(1/BigInteger, 2,5);
Run Code Online (Sandbox Code Playgroud)

1/BigInteger总是返回0,导致结果也是0如此.我试着BigDecimal为c#寻找一些课程,但我什么都没发现.即使没有,有什么方法可以算这个BigDecimal吗?

c# biginteger inverse

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

Java:二进制序列表示

我正在做一些关于量化过程等的实验.

我尝试实现二进制化过程,该过程产生一个"二进制字符串",后来由xor和其他一些东西处理.

无论如何二进制化如下,其中d和u是一些可以比较的数字:

String b = "";
for (int i = 0; i < u.length; u++) {
    if(d[i] < u[i]) {
        b[i] += '0';
    } else {
        b[i] += '1';
    }
}
Run Code Online (Sandbox Code Playgroud)

目前描述的我有一个字符串,每个字符为0或1.

使用a BigInteger给我一个Object,我可以将两个值相互异或:

BigInteger bi = new BigInteger(b, 2);
(...)
BigInteger result = bi.xor(other_bi);
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以实现我想要做的事情?我没找到任何东西,但也许有一个我没找到?

java binary biginteger

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

如何将BigInteger转换为String?

我解密了一个数据并获得了一个BigInt,当我尝试将其转换为字符串时,我得到了一些有线字符.

获取BigInteger的代码

BigInteger dec = process.Decrypt(sec);
Run Code Online (Sandbox Code Playgroud)

获取ByteArray的代码

byte testBy[] = dec.toByteArray();
Run Code Online (Sandbox Code Playgroud)

转换为字符串的代码

String ss = new String(testBy);
System.out.println(ss);
Run Code Online (Sandbox Code Playgroud)

我也试过这个代码

String ss = new String(testBy);
System.out.println(ss, "UTF8");
Run Code Online (Sandbox Code Playgroud)

我得到了这个输出

=^ö½ß‡k+Éæ‚ûŽ3B‚+…Òæ?&¶?kÛUô—c
Run Code Online (Sandbox Code Playgroud)

帮帮我吧

java string bytearray biginteger

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

使用BigInteger计算地球质量

我试图用BigInteger来计算地球的质量,但实际上并没有增加一些东西.

我用来计算地球质量的公式是:M = ar2/G = 5.98×1024 kg.a是重力加速度(9.8 m/s平方),r是地球的半径((6.4)*(10 ^ 6))和Big-G((6.673)*(10 ^ -11))引力常数.

我应该得到的值是:5.97219×10 ^ 24 kg = 5,972,190,000,000,000,000,000,000,000,但我当前输出的值是:-9353.显然是一个巨大的差异,所以任何帮助将不胜感激.

这是我到目前为止所拥有的......

double bigG = (6.673) * (10^-11);
double radiusSquared = 6371^2;
double acceleration = (10^2); (obviously rounded here from 9.8)
double mass = (acceleration*radiusSquared)/bigG;

BigInteger massBig = new BigDecimal(mass).toBigInteger();
System.out.println("mass of earth: "+massBig);'
Run Code Online (Sandbox Code Playgroud)

我不确定我是否只是输入了一些输入错误,或者我是否未能识别Java的某些基础过程,因为我不熟悉Java和物理.

谢谢


更新

好的,我做了你说的,似乎解决了部分问题......这是更新的代码:

public static void getPlanetMass(){
    double bigG = (6.673) * (Math.pow(10, -11));
    double radiusSquared =  (Math.pow(6371, 2));
    double acceleration =  (Math.pow(9.8,2)); //(obviously rounded here from 9.8) …
Run Code Online (Sandbox Code Playgroud)

java math physics biginteger

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

为什么Perl模运算符使用bignum而不是Math :: BigInt使用大整数?

我在Perl脚本中尝试了以下内容:

$b = 19999999999999999 % 10000000000000000;
print "$b\n";
Run Code Online (Sandbox Code Playgroud)

它输出错误0.

然后我找到一个答案说使用bignum:

use bignum;
$b = 19999999999999999 % 10000000000000000;
print "$b\n";
Run Code Online (Sandbox Code Playgroud)

它输出正确9999999999999999.

bignum只需将所有整数常量转换为Math :: BigInt.所以我尝试了以下哪些应该与使用相同bignum:

use Math::BigInt;
$b = Math::BigInt->new(19999999999999999) % Math::BigInt->new(10000000000000000);
print "$b\n";
Run Code Online (Sandbox Code Playgroud)

但那输错了0.我在使用Math :: BigInt做错了吗?

perl biginteger modulo

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

Python - Java Math操作会产生不同的结果

我在Java和Python中都做了大量的数学运算.总和是相同的,但结果是不同的.

python_n1 = int(math.floor(math.pow(int((int(361) * (int(4900 + 4489))) * int(4356)), int(6))))
BigInteger Java_n1 = (x[20].multiply(x[7].add(x[15])).multiply(x[10])).pow(6);

python_simple_sum = 14764352724**6 #or math.pow(14764352724, 6)
BigInteger Java_simple_sum = new BigInteger("14764352724 ").pow(6)
Run Code Online (Sandbox Code Playgroud)

Python Answers = 10358251994780842724998096890217137953445700726699419360034816 Java Answers =10358251994780842575401275783021915748383652186833068257611776

Java正在获得正确的结果,但python不是.据我所知,我没有使用浮点数.这是什么问题.

python java math biginteger

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