高效判断素数的算法

来源:互联网 发布:icp算法源码 编辑:程序博客网 时间:2024/03/29 14:53

来求出小于等于n的所有的素数。

    num = 0;

    for(i=2; i<=n; i++)

    {  for(j=2; j<=sqrt(i); j++)//incude<math>,其实可以避免sqrt();可以用j*j<i;来代替

         if( j%i==0 ) break;

       if( j>sqrt(i) ) prime[num++] = i;  //这个prime[]是int型,跟下面讲的不同。

    }

    这就是最一般的求解n以内素数的算法。复杂度是o(n*sqrt(n))


筛法求素数

#include<math.h>#include<iostream> #include <windows.h>using namespace std;bool prime [100]; void isPrime(){int i, j;for (i = 2; i < 100; i++){prime[i] = 1;}for (i = 2; i < 100; i++){if (prime[i]) for (j = i + i; j < 100; j += i){prime[j] = 0;}}}int main(){isPrime();for (int i = 1; i < 100; i++){if (prime[i])cout << i << endl;}system("pause");return 0;}


方法三:

bool isPrime1(int num){if (num == 2 || num == 3){return true;}if (num % 6 != 1 && num % 6 != 5){return false;}for (int i = 5; i*i <= num; i += 6){if (num % i == 0 || num % (i + 2) == 0){return false;}}return true;}



0 0
原创粉丝点击