用户输入一个整数,然后显示所有小于或等于该数的素数!

用户输入一个整数,然后显示所有小于或等于该数的素数!在做课后习题是碰见这个题目,自己写的是一下这样的。但总觉得有点慢。我输入了1000W,等了好久,还不出结果。后来查了下,还有个叫 埃拉托色尼筛法,这个貌似效率要高很多,回头再来试试。

下图是我输入了100W的截图:


用户输入一个整数,然后显示所有小于或等于该数的素数!_第1张图片


下面是详细的算法:


#include
#include
#pragma warning(disable:4996)

int main(void)
{
	int num , n;
	unsigned long div;
	bool isPrime;  // 素数标志位
	int ct ; //计数器
	ct =0 ;

	printf("Please enter an integer for analysis:");
	printf("Enter q to quit. \n");
	while (scanf("%d", &num)==1)
	{
		if(num>0)
		{
		for(n=2 ; n <= num ; n++) //外循环2-输入数
		{
			for (div = 2, isPrime = true; (div*div)<= n; div++)//内循环,做素数判定
			{
				if (n%div == 0)
				{

				isPrime = false; //当一个数被整除了(余数为0)的情况下,肯定不是素数。标志位设置为false。
								 //当一个数无法被2- 平方根数 ,整数时,肯定是一个素数,标志位设置为true。

				}
			} 

			if (isPrime) //整个内循环结束时,如果isPrime是true,说明是素数嘛。
			{
				ct++;
				if(ct%8==0)
				printf("\n", n);
				printf("%d ", n);
			}
		}
		printf("\nwe have %d prime numbers! .\n", ct);
		

		printf("Please enter another integer for analysis:");
		printf("Enter q to quit .\n");
		}
		else 
			printf("Please enter another integer for analysis:");
	}

	printf("Bye.\n");
	system("pause");
	return 0;
	
}


你可能感兴趣的:(算法)