输出100-200之间的素数

判断一个数n是否为素数(prime)的方法:

基本算法:让n被i除(i的值为从2到n-1),如果n能被2~(n-1)的任一个整数整除,则表示n肯定不是素数,因此,可以提前结束循环。此时i的值必然小于n。

#include
int main()
{
	int n, i;
	printf("please enter a integer number, n=?");
	scanf("%d", &n);
	for (i = 2; i < n; i++)
	    if (n % i == 0) break;
	if (i < n) 
	   printf("%d is not a prime number.\n", n);
	else 
	   printf("%d is a prime number.\n", n);
	return 0;
	    
}

判断n是否为素数,关键是看循环时的i的值是否小于n,如果n能被2~(n-1)的一个整数整除,则必然时由break语句导致循环提前结束,即i并未达到n的值就终止循环了。显然此时i < n 。因此,只要在循环结束后检查循环变量i的值,就能判定n是否是素数了。

算法改进:其实n不必被2~(n-1)的各整数去除,只须将n被2~n/2的整数除即可,甚至只须被2~\sqrt{n}的整数除即可。因为n的每一对因子,必然有一个小于\sqrt{n},另一个大于\sqrt{n}。例如,判断17是否为素数,只须将17被2,3和4除即可,如都除不尽,n必为素数。

为方便,可以定义一个整形变量k(其值为\sqrt{n}的整数部分);如果n不能被2~k(即\sqrt{n})的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。在循环后判定i的值是否大于或等于k+1,若是,则表明未曾被2~k任一整数整除过,因此输出该数是素数。

#include
#include
int main()
{
	int n, i, k;
	printf("please enter a integer number:n=?");
	scanf("%d", &n);
	k = sqrt(n);
	for (i = 2; i <= k; i++)
		if (n % i == 0) break;
	if (i <= k)
		printf("%d is not a prime number.\n", n);
	else
		printf("%d is a prime number.\n", n);
	return 0;
}

有了上文的基础,求100~200的全部素数就不困难了,只要增加一个外循环,先后对100~200的全部整数一一进行判定即可。

#include
#include
int main()
{
	int n, k, i, m = 0;
	for (n = 101; n <= 200; n = n + 2)
	{
		k = sqrt(n);
		for (i = 2; i <= k; i++)
			if (n % i == 0)  break;
		if (i >= k + 1)
		{
			printf("%5d", n);
			m = m + 1;
		}
		if (m % 10 == 0)
			printf("\n");
	}
	printf("\n");
	return 0;
}

 

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