素数也称为质数,只能被1和它本身整除,以下方法效率依次递增,都是用的试除法:
方法一(效率最低):
#include <stdio.h>
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
//判断是否为素数
//用 2 ~ i-1 之间的数去试除
int flag = 1;//设置标签
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
/*
* 打印结果:
* 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
*count = 21
*/
方法二:
#include <stdio.h>
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i+=2)
{
//判断是否为素数
//从101开始,用奇数试除
int flag = 1;//设置标签
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
方法三:
#include<stdio.h>
int main()
{
int count = 0;
for (int i = 100; i <= 200; i++)
{
int flag = 1;
for (int j = 2; j <= (i/2); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
count++;
}
}
printf("\n%d ", count);
return 0;
}
方法四:
//i = m*n
//m和n中至少由一个数字是 小于等于 开平方i的
//如果i不是素数,一定能在2~开平方i之间 找到一个i的因子
//16 = 2*8
//16 = 4*4
//
//库函数sqrt,是用来开平方的
//math.h
//
#include<stdio.h>
#include<math.h>
int main()
{
int count = 0;
for (int i = 100; i <= 200; i++)
{
int flag = 1;
for (int j = 2; j <= sqrt(i); j++)//此种开平方的办法效率最高
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
count++;
}
}
printf("\n%d ", count);
return 0;
}
这里推荐一篇博客,《素数求解的N种境界》,链接:
https://so.youkuaiyun.com/so/search?spm=1000.2115.3001.4498&q=%E3%80%8A%E7%B4%A0%E6%95%B0%E6%B1%82%E8%A7%A3%E7%9A%84N%E7%A7%8D%E5%A2%83%E7%95%8C%E3%80%8B&t=&u=
大家可以照着这个题目多搜索相关的内容来看