C#工具类之素数扩展类
2024-10-18 12:05:52
/// <summary>
/// 素数帮忙类
/// 本类是从.net源码 类 internal static class HashHelpers 类里抽取相应的代码
/// https://referencesource.microsoft.com/#mscorlib/system/collections/hashtable.cs,e8668bf19da49963
/// Hashtable.cs里
/// </summary>
public class PrimeHelper
{
/// <summary>
/// 给定一些素数(除了2)
/// </summary>
public static readonly int[] Primes = {
, , , , , , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , ,
, , , , , , , , , , , , ,
, , , , , , , , , , , ,
, , , , , , , , }; /// <summary>
/// 判断是否是素数
/// </summary>
/// <param name="candidate"></param>
/// <returns></returns>
public static bool IsPrime(int candidate)
{
//偶数当然不是素数
if ((candidate & ) != )
{
int limit = (int)Math.Sqrt(candidate);
for (int divisor = ; divisor <= limit; divisor += )
{
if ((candidate % divisor) == )
return false;
}
return true;
} //2是素数
return (candidate == );
} /// <summary>
/// 大于给定数的最小素数
/// </summary>
/// <param name="min"></param>
/// <returns></returns>
public static int GetPrime(int min)
{
if (min < )
{
throw new ArgumentException("给定数必须是自然数");
} //先从给定数组里找
foreach (int prime in Primes)
{
if (prime >= min)
{
return prime;
}
} //给定数组里没有相应的素数,则循环找
//如果min是偶数,则起始值为加1,否则起始值为本身
for (int i = (min | ); i < Int32.MaxValue; i += )
{
if (IsPrime(i) )
return i;
} return min;
} /// <summary>
/// 获取最小素数(2除外)
/// </summary>
/// <returns></returns>
public static int GetMinPrime()
{
return Primes[];
} }
最新文章
- 使用matlab进行空间拟合
- zendframework 2
- 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载
- linux numfmt 命令--转换数字
- [转]centos 下 autoconf版本升级
- JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
- XCode6之后预编译文件的创建
- 史上最全APP推广渠道
- Sql Server之旅——第五站 确实不得不说的DBCC命令
- 上传预览 easyui部分控件获取focuse 表单验证
- zookeeper源码分析-server-util
- (六)java结构控制语句
- SQL Server 扩展事件
- 菜鸟学IT之python词云初体验
- Python——Flask框架——电子邮件
- linux 7 关闭防火墙 开启sshd服务
- 通过eclipse打开jdk native源码
- OpenBLAS简介及在Windows7 VS2013上源码的编译过程
- mysql my.cnf 配置建议
- CSS技巧:逐帧动画抖动解决方案