原始版素数表
void originalPrime()
{
long p, d, input;
int isPrime;
printf("input a number:");
scanf("%li", &input);
for (p = 2; p <= input; p++) {
isPrime = 1;
for (d = 2; d < p; d++) {
if (0 == p % d) {
isPrime = 0;
}
}
if (isPrime) {
printf("%li\n", p);
}
}
}这个就是简单的for循环嵌套,来寻找素数。
改进版素数表
void increPrime()
{
long p, d, input;
int isPrime;
printf("input a number:");
scanf("%li", &input);
for (p = 2; p <= input; p++) {
isPrime = 1;
for (d = 2; d <= sqrt(p) ; d++) {
if (0 == p % d) {
isPrime = 0;
}
}
if (1 == isPrime) {
printf ("%li\n", p);
}
}
}筛选法素数判定
for (i = 3; i <= input; i++) {
if (i % 2 == 0) {
prime[i] = 0;
} else {
prime[i] = 1;
}
}i=4; 由于prime[4]=0,不在继续筛法步骤。
i=5; 由于prime[5]=1, 把prime[10],[15],[20],[25],[30]标为0.
void primeFilter()
{
long i, j, input;
printf("input a number:");
scanf("%li", &input);
int prime[input + 1];
prime[2] = 1;
for (i = 3; i <= input; i++) {
if (i % 2 == 0) {
prime[i] = 0;
} else {
prime[i] = 1;
}
}
for (i = 3; i <= sqrt(input); i++) {
if (prime[i]) {
for (j = i + i; j < input; j += i) {
prime[j] = 0;
}
}
}
for (i = 2; i <= input; i++) {
if (prime[i]) {
printf("%li\n", i);
}
}
}如果输入的数不是很大的时候,那么其实三个算法效果差别不大,但是如果数很大,比如100000,那么输出结果的时间可以相差好几秒。而且筛选法的时间非常快。
2728



被折叠的 条评论
为什么被折叠?



