c# 求质数的方法

  1. 质数定义法:质数是指只能被1和自身整除的正整数,即除了1和它本身以外没有其他因数。因此,判断一个数是否为质数,只需要将它分别除以2到它的平方根的整数,如果都不能整除,则它就是质数。这种方法比较简单直观,但对于较大的数会比较耗时。
     1         static bool IsPrime(int num)
     2         {
     3             if (num <= 1) return false;
     4             for (int i = 2; i * i <= num; i++)
     5             {
     6                 if (num % i == 0) return false;
     7             }
     8             return true;
     9         }
    10 
    11         static int CountPrimes(int n)
    12         {
    13             int count = 0;
    14             for (int i = 2; i < n; i++)
    15             {
    16                 if (IsPrime(i)) count++;
    17             }
    18             return count;
    19         }            

     

  2.  埃拉托色尼筛法:埃拉托色尼筛法是一种基于质数定义的算法,可以在一定范围内找出所有的质数。其基本思想是先列出所有的正整数,然后从2开始,将2的倍数标记为合数,再将下一个未标记的数3作为新的质数,将3的倍数标记为合数,以此类推。这种方法可以大大减少计算量,提高效率。

     

            static int GetPrimesNum(int maxNum)
            {
                int result = 0;
                var marks = new int[maxNum - 1];
                for (int i = 0; i < maxNum - 1; i++)
                {
                    if (marks[i] == 0)
                    {
                        result++;
                        int temp = 2;
                        while ((i + 2) * temp <= maxNum)
                        {
                            marks[(i + 2) * temp - 2] = 1;
                            temp++;
                        }
                    }
                }
                return result;
            }
  3. 米勒-拉宾素数测试法:米勒-拉宾素数测试法是一种基于费马小定理的概率算法,用于测试一个数是否为质数。其基本思想是随机选择一个数a作为底数,然后计算a^(n-1) mod n的值,如果等于1,则该数可能是质数;如果不等于1,则一定不是质数。这个过程可以重复进行多次,每次选择不同的底数a,以提高测试的准确性。这种方法具有高效、准确的特点,但存在一定的概率错误率。

    //待续

     

posted @ 2024-01-17 18:32  六镇2012  阅读(128)  评论(0编辑  收藏  举报