当前位置:网站首页>求素数的三种方法
求素数的三种方法
2022-08-09 15:05:00 【我好闲*】
目录
素数
定义:在正整数范围内,大于1平且只能被1和自身整除的数。
1.方法一
采用简单粗暴方法

我也不多说废话,一切尽在代码中。
求100-200之间的素数
素数:只能被1和自身整除
//求素数
#include <stdio.h>
int main()
{
int i = 0, j = 0, t = 0;
int count = 0; //计数
for (i = 100; i <= 200; i++)
{
//j的取值范围2-(i-1)
//对素数进行标记
t = 0;
for (j = 2; j <= i; j++)
{
if (i % j == 0)
{
t++; //素数:只能被1和自身整除
}
}
if (t == 1) //素数:只能被1和自身整除,所以t=1的为素数
{
printf("%d ", i);
count++; //计数
}
}
printf("\ncount=%d\n", count);
return 0;
}
2.方法二
进一步优化

#include <stdio.h>
//素数代码优化
//求100-200之间的素数
//素数:只能被1和自身整除
int main()
{
int count = 0; //计数
int i = 0;
for (i = 100;i <= 200;i++)
{
//判断是否是素数
int flag = 1; //利用flag标记素数
int j = 2;
//j的取值范围2-(i-1)
for (j = 2;j < i;j++)
{ //拿j试除i
if (i % j == 0)
{
flag = 0; //flag为0的为非素数
break; //如果在2-(i-1)范围内遇到一个能将i整除的数字,跳出for (j = 2;j < i;j++){...}循环
}
}
if (1 == flag)//这样可读性更高
{
count++;
printf("%d ", i);
}
}
printf("\ncount=%d\n", count);
return 0;
}3.方法三
最优方案

//最后的优化
//因为i=m*n;
// 16=2*8; 16=4*4;
//如果i能被2-(i的开平方)之间的某个数数整除,则i不是素数
//例如16,能被2-4(16的开平方)的2或者4整除,所以16不是素数
#include <stdio.h>
#include <math.h>
int main()
{
int count = 0; //计数
int i = 0;
for (i = 100;i <= 200;i++)
{
//判断是否是素数
int flag = 1; //利用flag标记素数
int j = 2;
//j的取值为2-sqrt(i)
for (j = 2;j <= sqrt(i);j++)
{ //拿j试除i
if (i % j == 0)
{
flag = 0; //flag为0的为非素数
break; //如果在2-sqrt(i)范围内遇到一个能将i整除的数字,
//跳出for (i = 100;i <= 200;i++){...}循环
}
}
if (1 == flag) //这样可读性更高
{
count++;
printf("%d ", i);
}
}
printf("\ncount=%d\n", count);//计数
return 0;
}
总结
可以看出从方法一到方法三,程序的执行次数在逐步减少,效率在不断的提高,希望这些方法对你有所启发。

边栏推荐
猜你喜欢
随机推荐
微信小程序学习(二)
FileInputStream与BufferedInputStream的区别
2022华数杯B题思路: 水下机器人的组装计划
js事件流
“泰迪杯”数据分析职业技能大赛B题 学生校园消费行为分析---复盘
canvas学习(一)
排序相关:数组的相对排序、最小的k个数(快排)、合并区间、翻转对 ...
多线程相关:按序打印、交替打印FooBar、交替打印字符串
Uart串口学习
Mysql学习(二)
yum安装mariadb数据库之后启动时提示 Failed to start mariadb.service: Unit not found
JS字符串对象基础操作方法
如何设置边框圆角
第五章:可视化地理空间数据
第二章:创建交互式地图(2.4-2.6)
vmware workstation 未能启动vmware
文字样式的常见属性的如何使用?
基于X264的动态帧率与动态码率调整的实现
第二章:创建交互式地图(2.1-2.3)
opacity和rgba的区别









