(一)认识素数
1、素数也称为质数
2、一个大于1的自然数,只能被1和它本身整除的就是素数
方法一
int main()
{
int i = 0;
int count = 0;
printf("100-200之间的素数:\n");
for (i = 100; i <= 200; i++)
{
//判断i是否为素数
//2->i-1之间的数字去试i,看能不能被整除
int j = 0;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
if (i == j)
{
printf("%d ", i);
count++;
}
}
printf("\n\n区间内的素数个数:%d\n", count);
return 0;
}
结果:
方法二
int main()
{
int i = 0;
int count = 0;
printf("100-200之间的素数:\n");
for (i = 100; i <= 200; i++)
{
//判断i是否为素数
//2->i-1之间的数字去试i,看能不能被整除
int j = 0;
int flag = 1;//假设i就是素数
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;//不是素数
break;
}
}
if (flag == 1)
{
printf("%d ", i);//素数
count++;
}
}
printf("\n\n区间内的素数个数:%d\n", count);
return 0;
}
结果:
优化方案1:
引用sqrt()函数,减少试除的次数
#include <math.h>
int main()
{
int i = 0;
int count = 0;
//m = a*b
//a和b中一定至少有一个数字是 <= 开平方m的
//16 = 2*8 =4*4
printf("100-200之间的素数:\n");
for (i = 100; i <= 200; i++)
{
//判断i是否为素数
//2->i-1之间的数字去试i,看能不能被整除
int j = 0;
int flag = 1;//假设i就是素数
for (j = 2; j <= sqrt(i); j++) //sqrt() - 是开平方函数- 头文件math.h
{
if (i % j == 0)
{
flag = 0;//不是素数
break;
}
}
if (flag == 1)
{
printf("%d ", i);//素数
count++;
}
}
printf("\n\n区间内的素数个数:%d\n", count);
return 0;
}
结果:
优化方案2:
排除偶数,减少试除次数
#include <math.h>
int main()
{
int i = 0;
int count = 0;
//m = a*b
//a和b中一定至少有一个数字是 <= 开平方m的
//16 = 2*8 =4*4
printf("100-200之间的素数:\n");
for (i = 101; i <= 200; i+=2) //排除偶数试除数据就会少一半
{
//判断i是否为素数
//2->i-1之间的数字去试i,看能不能被整除
int j = 0;
int flag = 1;//假设i就是素数
for (j = 2; j <= sqrt(i); j++) //sqrt() - 是开平方函数- 头文件math.h
{
if (i % j == 0)
{
flag = 0;//不是素数
break;
}
}
if (flag == 1)
{
printf("%d ", i);//素数
count++;
}
}
printf("\n\n区间内的素数个数:%d\n", count);
return 0;
}
结果:
若有表述不对的地方请您留言我,谢谢!