c语言求素数以及改进算法
Posted passedbylove
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言求素数以及改进算法相关的知识,希望对你有一定的参考价值。
代码需要使用c99编译
#include <stdio.h> #include <stdlib.h> #include <math.h> //是否为素数 //从2到x-1测试是否可以整除 //时间复杂度O(n-2),n趋向正无穷 int isPrime(int x) int ret = 1; for(int i = 2; i < x; i++) if(x % i == 0) ret = 0; break; return ret; //除了2以外,所有的偶数都不是素数,从3到x-1,每次加2 //x为偶数时间复杂度O((n-3)/2+1) //x很大时时间复杂度接近于(n/2) int isPrime2(int x) int ret = 1; if(x == 1 || (x % 2 ==0 && x != 2)) ret = 0; for (int i = 3; i < x; i += 2) if( x % i == 0) ret = 0; break; return ret; //无须到x-1,到sqrt(x) //时间复杂度O(Log2n) 即sqrt(x) int isPrime3(int x) int ret = 1; if(x == 1 || x % 2 == 0 && x != 2) ret = 0; for(int i = 3 ; i < sqrt(x); i += 2) if( x % i == 0) ret = 0; break; return ret; //判断是否能被已知的且<x的素数整除 int isPrime4(int x, int knownPrimes[], int numberOfKnownPrimes) int ret = 1; int i; for( i = 0; i < numberOfKnownPrimes; i++) if (x % knownPrimes[i] == 0 ) ret = 0; break; return ret; int main() const int number = 100; int prime[number] = 2; int count = 1; int i = 3; while( count < number ) if(isPrime4(i ,prime, count)) prime[count++] = i; i++; for( i = 0; i < number; i++) printf("%d",prime[i]); if( (i + 1) % 5 ) printf("\t"); else printf("\n"); return 0;
以上是关于c语言求素数以及改进算法的主要内容,如果未能解决你的问题,请参考以下文章