筛选法产生素数表
来源:互联网 发布: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