c#

位置:IT落伍者 >> c# >> 浏览文章

C#4.0提供BigInteger类 支持大数运算


发布日期:2021年02月05日
 
C#4.0提供BigInteger类 支持大数运算

前段时间有个同事说

是个质数

直觉告诉我光是在中间加几个在后面加个估计不是质数

有很多面试题都会要面试者去做一些关于大数的运算例如在这里就有判断上面这个数是不是质数的情况

很明显Integer Long都是不能来处理如此巨大的数的

net framework SystemNumericsdll 中提供了BigInteger 类使用这个类可以很方便的解决这个问题

判断n是质数的方法

如果是偶数肯定不是质数

如果能够被小于或等于Sqrt(n) 的数除尽则不是质数

代码如下

private static bool IsPrime()

{

string largeNumber = @;

BigInteger bigInteger = BigIntegerParse(largeNumber);

if (bigIntegerIsEven)

{

return false;

}

for (BigInteger bi = ; BigIntegerPow(bi ) <= bigInteger; bi += )

{

if (bigInteger % bi == )

{

return false;

}

}

return true;

}

本来for 循环中的代码应该是

for (BigInteger bi = ; bi <= BigIntegerSqrt(bigInteger); bi += )

{

if (bigInteger % bi == )

{

return false;

}

}

可惜的是BigInteger 不支持Sqrt方法所以换用

for (BigInteger bi = ; BigIntegerPow(bi ) <= bigInteger; bi += )

结果如下图

可以知道…………………………不是质数可以被除尽

C语言中有道经典的题目是求!后面有几个

如果你不知道BigInteger的话应该怎么做?

! 可以理解为

因为偶数比要多所以i值比j值多很多所以求!有多少个可以认为是求j的值

当然也可以用公式

Sum = [/]+[/(^)]+[/(^)]=++=;

如果你既没有思路也没有公式脑子里面只有一个念头****** 的for循环然后统计的数量的话 中也可以实现虽然好像速度慢了点不过也还是可以得到答案的

代码如下

统计的代码如下

运行结果如下

int count = ;

for (int i = strSumLength ; i >= ; i)

{

if (strSum[i] == )

{

count++;

}

else

{

break;

}

}

还有很多使用大数的运算的地方都等待着你的发挥!

               

上一篇:展现C#世界之七:异常处理

下一篇:c#中String和string的区别