求质数几种算法

本文介绍了一种生成指定范围内质数的算法,包括直接应用质数原理的方法及其两种改进方案。改进后的算法通过减少不必要的计算提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求某个范围内质数的算法

一、直接应用质数原理:

质数原理:只能被2~其本身-1的任意一个数字,如果都不可以被除尽,那么肯定是质数。

源码:

static bool IsPrime(int num)
        {
            for (int i = 2; i <= num-1;i++)
            {
                if (num % i == 0) return false;
            }
            return true;
        }

时间复杂度:O(n)
改进版一:

把上方算法num-1改成Math.Sqrt(num),虽然时间复杂度还是O(n),但是如果数字越大,效果越明显

改进版二:

一个合数一定可以分解成若干的质数的乘积(2除外),那么我们可以预存质数在一个列表中,然后直接从已有的质数中进行除法判断,代码如下:

namespace Csharp
    {
        public class MainTest
        {
            public static List<int> primes = new List<int>();

            static bool IsPrime(int num)
            {
                for (int i = 0; i < primes.Count; i++)
                {
                    if (num % primes[i] == 0) return false;
                }
                return true;
            }
            static void Main(string[] args)
            {
                int num = 0;
                //Count how many prime numbers are generated
                int counter = 0;
                Console.WriteLine("Please input a number:");
                num = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Results are:");
                for (int i = 2; i < int.MaxValue; i++)
                {
                    if (IsPrime(i))
                    {
                        primes.Add(i);
                        Console.WriteLine(i);
                        counter++;
                        if (counter == num)
                        {
                            break;
                        }
                    }
                }
            }
        }
     }

时间复杂度:O(n)(仅考虑质数判断部分),空间复杂度S(n)

转载于:https://www.cnblogs.com/ServiceboyNew/p/3294299.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值