首先要想打印100到200之间的素数,我们就要知道什么是素数。素数通俗的来讲就是素数本身只能被自身和1整除。例如3,5,7他们就只能被1或自身整除。
一、首先我们我们来讲第一种方式:
#include<stdio.h>
#include<windows.h>
int main()
{
int IsPrime(int n);
void ShowPrime(int start, int end);
ShowPrime(100, 200);
system("pause");
return 0;
}
int IsPrime(int n)//这里写一个判断是否是素数的判断函数此后的优化都是对此函数进行优化。
{
int i = 2;//这里初始值设为2因为素数是只能被1或自身整除所以循环从2开始。
for (; i < n; i++){
if (n % i == 0){
return 0;
}
}
return 1;
}
void ShowPrime(int start, int end)
{
for (; start <= end; start++)
{
if (IsPrime(start))//返回值为1则打印这个数。
{
printf("%d ", start);
}
}
printf("\n");
}
二、第二种方式:
第二种思想就是 一个数的可以被整除那么他必定有两个因子,而在这众多因子对中,其中最大的一个因子就是他本身,次之就是自身的一半。所以我们只需要将原来的循环条件设置为这个数自身的一半即可将循环的次数至少减少一半。而我们接下来的优化也遵从这一原则不断减少上限制。
int IsPrime(int n)
{
int i = 2;
for (; i < n / 2; i++)
{
if (n % i == 0){
return 0;
}
}
return 1;
}
三、第三种方式:
第三种就是将要求的数开方,就可以将因子再次缩小。
int IsPrime(int n)
{
int i = 2;
int top = (int)sqrt(n);//此处用到sqrt()函数需要在代码首段包含头文件添加#include<math.h>
for (; i <= top; i++){
if (n % i == 0){
return 0;
}
}
return 1;
}