c语言判断100到200之间的素数?

*
    判断100到200之间的素数
    标准:素数就是质数   只能被1和它本身整除。
*/

方法1:

#include"stdio.h"

int main() {
	int count = 0;
	int i = 0;
	for (i = 100; i < 200; i++) {
		int j = 0;
		for (j = 2; j < i; j++) {
			if (i % j == 0) {
				break;
			}
		}
		if (i == j) {
			printf("%d是素数\n", i);
			count++;
		}
	}
	printf("\n一共有%d个素数\n", count);
	return 0;
}

方法2:

#include"stdio.h"

int main() {
	int count = 0;
	int i = 0;
	for (i = 100; i <= 200; i++) {
		int flag = 1;
		int j = 0;
		for (j = 2; j < i; j++) {
			if (i % j == 0) {
				flag = 0;
				break;
			}
		}
		if (flag == 1) {
			count++;
			printf("%d是素数\n", i);
		}
	}
	printf("\n总共有%d个素数\n", count);
	return 0;
}

方法两处优化后的代码  3:

#include"stdio.h"
/*
	m = a * b
	a和b中至少有一个数是 小于等于 开平方m的
	16 = 2*8    16开平方是 4 * 4   其中2是小于4的    
	只要找到2了就能证明不是素数了 , 不用把整个数都循环一遍

	sqrt()   是开平方函数 需要引用math.h头文件
	
*/
#include"math.h"


int main() {
	int count = 0;
	int i = 0;
    //for (i = 100; i <= 200; i++) {   // 还可以每次递进2,把所有的偶数都去除掉,  又节省了一半的时间。
	for (i = 101; i <= 200; i+=2) {
		int flag = 1;
		int j = 0;
		//printf("\n=====%lf======\n", sqrt(i));  //12.328828

		for (j = 2; j <= sqrt(i); j++) {   //  条件是从2到 i的开平方(原来是从2到i)     循环次数上最少可以节省一半。
			if (i % j == 0) {
				flag = 0;
				break;
			}
		}
		if (flag == 1) {
			count++;
			printf("%d是素数\n", i);
		}
	}
	printf("一共有%d个素数", count);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/xingyuncao520025/article/details/130739792