C# 4.0 大数的运算--BigInteger的应用详解
发布时间:2022-02-02 06:40:05
前段时间,有个同事说
“30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000001”
是个质数。
直觉告诉我,光是在中间加几个0,在后面加个1,估计不是质数。
有很多面试题,都会要面试者去做一些关于大数的运算,例如在这里就有判断上面这个数是不是质数的情况。
很明显,Integer ,Long都是不能来处理如此巨大的数的。
在.net framework 4.0中,System.Numerics.dll 中提供了BigInteger 类。使用这个类可以很方便的解决这个问题。
判断n是质数的方法:
1:如果是偶数,肯定不是质数
2:如果能够被小于或等于Sqrt(n) 的数除尽,则不是质数。
代码如下:
private static bool IsPrime()
{
string largeNumber = @"30000000000000000000000...000000001”;
BigInteger bigInteger = BigInteger.Parse(largeNumber);
if (bigInteger.IsEven)
{
return false;
}
for (BigInteger bi = 3; BigInteger.Pow(bi, 2) <= bigInteger; bi += 2)
{
if (bigInteger % bi == 0)
{
return false;
}
}
return true;
}
本来for 循环中的代码应该是
for (BigInteger bi = 3; bi <= BigInteger.Sqrt(bigInteger); bi += 2)
{
if (bigInteger % bi == 0)
{
return false;
}
}
可惜的是BigInteger 不支持Sqrt方法,所以换用
for (BigInteger bi = 3; BigInteger.Pow(bi, 2) <= bigInteger; bi += 2)
结果如下图:
可以知道”30000000000000000000000000…………………………..1”不是质数,可以被13除尽。
2:C语言中有道经典的题目是求100!后面有几个0.
如果你不知道BigInteger的话,应该怎么做?
100! 可以理解为
因为偶数比5要多,所以i值比j值多很多,所以求100!有多少个0,可以认为是求j的值
当然也可以用公式
Sum = [100/5]+[100/(5^2)]+[100/(5^3)]=20+4+0=24;
如果你既没有思路,也没有公式,脑子里面只有一个念头:1*2*3*4*5*..*100 的for循环,然后统计0的数量的话,在4.0 中也可以实现,虽然好像速度慢了点,不过也还是可以得到答案的:
代码如下:
统计的代码如下:
运行结果如下:
int count = 0;
for (int i = strSum.Length - 1; i >= 0; i--)
{
if (strSum[i] == '0')
{
count++;
}
else
{
break;
}
}
还有很多使用大数的运算的地方,都等待着你的发挥!


猜你喜欢
- 本文实例讲述了android中图形图像处理之drawable用法。分享给大家供大家参考。具体如下:一、如何获取 res 中的资源数据包pac
- Spring 表达式语言简称为 SpEL,一种类似 Ognl 的对象图导航语言(对于 ognl 不熟悉的同学可以参考一下: Ognl 系列博
- 今天遇到一个需求,需要处理通过接口传过来的一个参数,参数内容为一个拼接好的Url地址,且该地址还会携带了一些额外的参数,包括但不限于数字,字
- SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库。Android提供了3种操作数据的方式,SharedPrefe
- 本文实例为大家分享了Java实现五子棋的具体代码,供大家参考,具体内容如下任务概述:五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策
- 这里使用的是spring-security和原生的jasig cas包来进行整合,为什么没有直接使用spring提供的spring-secu
- 在此附上超详细JDK1.8安装与配置超详细JDK1.8安装与配置一、卸载JDK应用程序①在开始处,点击设置②点击应用③点击程序和功能④打开程
- SpringBoot v2.2以上重复读取Request Body内容一、需求项目有两个场景会用到从Request的Body中读取内容。打印
- 多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用
- 实例如下:#region 自定义变量 int currentCol = -1; bool sort; #
- 一、添加pom.xml依赖<parent> <groupId>org.springfram
- 本文实例为大家分享了android surfaceView实现播放视频的具体代码,供大家参考,具体内容如下RelativeLayout<
- 现在Java的大部分项目都是基于Maven, 在Maven项目中使用Selenium2. 非常简单。 首先你需要配置好
- 这是一次阿里面试里被问到的题目,在我的印象中,final修饰的方法是不能被子类重写的。如果在子类中重写final修饰的方法,在编译阶段就会提
- RocketMQ 是什么Github 上关于 RocketMQ 的介绍:RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件
- 一般对于业务复杂的流程,会有一些处理逻辑不需要及时返回,甚至不需要返回值,但是如果充斥在主流程中,占用大量时间来处理,就可以通过异步的方式来
- 前言Feign是一个声明式的Web服务客户端,是面向接口编程的。也就是说使用Feign,只需要创建一个接口并使用注解方式配置它,就可以完成对
- 本文实例为大家分享了java绘制五子棋棋盘的具体代码,供大家参考,具体内容如下源码:import javax.imageio.ImageIO
- 如下图:点击加号添加键值对:archetypeCataloginternal补充知识:idea+maven+tomcat报404我的解决办法
- 一、什么是状态模式定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。主要解决:当控制一个对象状态的条件表达式过于