素数判定

来源:互联网 发布:网络大电影出品 编辑:程序博客网 时间:2024/04/28 03:36

嗯……,这里就不多说了,直接就上代码吧,几种判定素数的方法,再加上一个素数筛:

//素性判定问题的测试版 //具体内容请参考《计算机程序与设计基础》(第二版) 乔林 编著 P125 #include <stdio.h>#include <stdlib.h>#include <math.h>#include <time.h>int Is_prime1(unsigned int n);int Is_prime2(unsigned int n);int Is_prime3(unsigned int n);int Is_prime4(unsigned int n);int Is_prime5(unsigned int n);int Is_prime6(unsigned int n);int main(){    for(int i = 2; i <= 100; i++)    {            if(Is_prime6(i))                printf("%8d",i);    }        system("pause");    return 0;}int Is_prime1(unsigned int n)//入门版,最基础的判断素数的方法 {    unsigned int i = 2;        while(i < n)    {            if(n % i == 0)                 return 0;            i++;    }        return 1;}int Is_prime2(unsigned int n)//家庭基本版,在上面的基础上加以略微优化 {    unsigned int i = 2;        while(i <= (unsigned int)sqrt(n))    {            if(n % i == 0)                 return 0;            i++;    }        return 1;}    int Is_prime3(unsigned int n)//家庭高级版,在家庭版的基础上加以优化 {    unsigned int i;        if(n % 2 == 0)         return 0;             i = 3;        while(i <= (unsigned int)sqrt(n))    {            if(n % 2 == 0)                 return 0;            i += 2;    }        return 1;}    int Is_prime4(unsigned int n)//小型企业版,在上面的基础上消除浮点误差 {    unsigned int i;        if(n % 2 == 0)         return 0;    i = 3;        while(i <= (unsigned int)sqrt(n) + 1)    {            if(n % i == 0)                 return 0;                        i += 2;    }        return 1;}    int Is_prime5(unsigned int n)//大型企业版,在小型企业版的基础上加以小小的优化 {    unsigned int i,t;        if(n % 2 == 0)         return 0;        i = 3;    t = (unsigned int)sqrt(n) + 1;        while(i <= t)    {            if(n % i == 0)                 return 0;                        i += 2;    }        return 1;}       int Is_prime6(unsigned int n)//终极版,兼具容错功能和高效之便 {    unsigned int i,t;        if(n <= 1)         printf("Error");        if(n == 2)         return 1;        if(n % 2 == 0)         return 0;        i = 3;    t = (unsigned int)sqrt(n) + 1;        while(i <= t)    {            if(n % i == 0)                 return 0;                        i += 2;    }        return 1;}

//素数筛法 #include <iostream>#include <fstream>//求得素数保存在data.txt中 const int N = 10000;int ss[N];int main(){    using namespace std;        ofstream fout ("data.txt");        for (int i = 2; i <= N; i++)        ss[i] = 1;        for (int i = 2; i <= N; i++)        if(ss[i])        {                 int k = 2,temp;                                  while((temp = k * i) <= N)                 {                             ss[temp] = 0;                             k++;                 }                                  fout << i << endl;        }            return 0;}


原创粉丝点击