-
质数定义法:质数是指只能被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的倍数标记为合数,再将下一个未标记的数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; }
-
米勒-拉宾素数测试法:米勒-拉宾素数测试法是一种基于费马小定理的概率算法,用于测试一个数是否为质数。其基本思想是随机选择一个数a作为底数,然后计算a^(n-1) mod n的值,如果等于1,则该数可能是质数;如果不等于1,则一定不是质数。这个过程可以重复进行多次,每次选择不同的底数a,以提高测试的准确性。这种方法具有高效、准确的特点,但存在一定的概率错误率。
//待续