筛选法产生素数表

来源:互联网 发布:fd抓包更改数据犯法么 编辑:程序博客网 时间:2024/05/27 12:22
#include <stdio.h>#include <stdlib.h>#include <math.h>#include <time.h>//prime[i]//if prime[i] = 1  then i is prime number;//otherwise i isn't prime number!char* solve(int n){    int i, j;    char *prime = NULL;        prime = (char*)malloc(sizeof(char) * ( n + 1));    for(i = 0; i < n; ++i)        prime[i] = 1;    prime[0] = 0;    prime[1] = 0;    for(i = 2; i <= sqrt(n); ++i)    {        if(prime[i])        {            for(j = 2 * i; j <= n; j += i)                prime[j] = 0;        }    }    return prime;}void print(char *a, int n){    int i;    for(i = 0; i <= n; ++i)    {        if(a[i])        {            printf("%d\t", i);        }    }    printf("\n");}int main(){    int n;    while(scanf("%d", &n) && n >=2)    {        time_t t1 = clock();        char *prime = solve(n);        time_t t2 = clock();                print(prime, n);        printf("time:%f\n", (t2 - t1) * 1.0 / CLOCKS_PER_SEC);        free(prime);    }    return 0;}
/////////////以下是产生素数表的关键代码
for(i = 0; i < n; ++i) prime[i] = 1; prime[0] = 0;prime[1] = 0; for(i = 2; i <= sqrt(n); ++i){ if(prime[i]) { for(j = 2 * i; j <= n; j += i) prime[j] = 0; } }
                                             
0 0
原创粉丝点击