C语言基础编程——素数代码大全

注:普通版是最简单的写法,进阶版是 “函数+数组” 的形式,并且在判断x是否是素数的方式上if(x%i==0),其中的i的量进阶版比普通版量要少,这样一定程度上能减少时间复杂度。

1.输入一个数,判断它是否为素数

1.1普通版(07.16_1)

//输入一个整数,判断它是否为素数 
#include
int main(void)
{
	int x;
	scanf("%d",&x);
	
	int i;
	int isprime=1;
	for(i=2;i

1.2进阶版(07.15_1)

//输入一个数x,判断它是否为素数 
//思路:先排除0,1以及2(不含2)以上的整数 
#include 
#include
int isprime(int x);
int main(void)
{
	int x;
	scanf("%d",&x);
	if(isprime(x)){
		printf("%d是素数",x);
	} else {
		printf("%d不是素数",x);
	}
	return 0;
 } 
 
int isprime(int x)
{
	int ret=1;
	int i;
	double size=sqrt(x);//小套路,再循环中尽量直接给值,不要给计算公式,这样能减少计算量 
	if(x==1 || (x!=2 && x%2==0)) ret=0;//0,1和2以上(不含2)的整数都不是素数。 
	for(i=3;i

2.输出x以内的素数

2.1普通版(07.16_3)

//输出100以内的素数
#include
int main(void)
{
	int i;
	for(i=1;i<100;i++) {
		int k;
		int isprime=1;
		for(k=2;k

2.2进阶版(07.15_3)

//构造n以内(不含)的素数表
//思路:见下面伪代码。
//(1)开辟prime[n],初始化其所有元素为1,prime[x]为1表示数x是素数;
//(2)令x=2;
//(3)若果x是素数,则对于(i=2;i*x
int main(void)
{
	const int n=100;
	int i;
	int isprime[n];
	for(i=0;i

3.输出前n个素数

3.1普通版(07.16_4)

//输出前50个素数
#include
int main(void)
{
	int cnt=0;
	int x;
	for(x=2;cnt<100;x++) {//揣摩这种for循环条件的写法 
	                     //因为cnt从0开始计数,所以不能挂等于 
		int i;
		int isprime=1;
		for(i=2;i

3.2进阶版(07.15_2)

//求出前number个素数(按大小),把他们放在数组中,然后遍历,输出 
//思路:定义一个数组,从小到大判断数是否是素数,是的话就放入这个数组,
//然后通过判断是否能被  已知的  小于x的  并且已在数组中  的素数 整除,来确定这个数是否为素数
//注:数组中已经初始化了几个易得知的素数,见line 10; 
//当然不初始化该数组也没问题,但是i要从2开始,因为1不是素数,从1开始没意义。 
#include
int isprime(int x, int knownprimes[], int numberofknownprimes);
int main(void)
{
	const int number=100;
	int prime[number]={2,3};//数组中的前两个已经初始化了所以下面i从5开始 
	int count=2;
	int i=5;//前两个素数已经初始化了 
	
//	//for test 
//	{//这个大括号和下面那个大括号都是用来调试时看变量输出情况的。上面这个作用是输出个表头 
//		int i;
//		printf("\t\t");
//		for(i=0;i

4.输出[m,n]区间内的素数,并求和(07.16_2)

//输出[m,n]区间内的素数,个数,并求和 
#include
int main(void)
{
	int m,n;
	scanf("%d %d",&m,&n);
	if(m==1) m=2;
	int cnt=0;
	int sum=0;
	int i;
	for(i=m;i<=n;i++) {
		int isprime=1;
		int k;
		for(k=2;k

 

你可能感兴趣的:(c语言)