当前位置:网站首页>多种优化方法打印100~200之间的素数
多种优化方法打印100~200之间的素数
2022-07-24 07:40:00 【暴躁小程序猿】
打印100~200之间的素数
多种优化方法打印100~200之间的素数。
本文采用四种方法打印100~200之间的素数,如果对大家有帮助的话可以关注加三连,持续更新。
一、题目概述
打印100~200之间的素数。
素数:即质数,除了1和自己之外,再没有其他的约数,则该数据为素数。
二、方法
方法一:试除法
试除法的思路:
因为求的是100至200之间的素数,且100肯定不是素数,所以设置变量i的取值范围是101~200,再设置一个变量j,因为任何数都可以被1整除所以j从2开始,如果j<i,就判断i%j是否等于0,如果等于0则说明i不是素数,break跳出然后i++;如果j和i相等,说明[2, i)之间的所有数据都不能被i整除,则i为素数
代码如下(示例):
思路:
素数:即质数,除了1和自己之外,再没有其他的约数,则该数据为素数,具体方式如下
*/
//方法一:试除法
int main()
{
int i = 0;
int count = 0;
// 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始
for(i=101; i<=200; i++)
{
//判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
int j = 0;
for(j=2; j<i; j++)
{
if(i%j == 0)
{
break;
}
}
// 上述循环结束之后,如果j和i相等,说明[2, i)之间的所有数据都不能被i整除,则i为素数
if(j==i)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
试除法的缺陷:通过对这些数据的分析,发现超过i/2的数据肯定不是i的倍数,这种方法做了很多没有意义的运算,应该尝试进行改进。
方法二
对于方法一(试除法)的优化,拿到数据,只需要检测【2,i/2】的区间内是否有元素可以被整除即可。
代码如下(示例):
int main()
{
int i = 0;//
int count = 0;
for(i=101; i<=200; i++)
{
//判断i是否为素数
//2->i-1
int j = 0;
for(j=2; j<=i/2; j++)
{
if(i%j == 0)
{
break;
}
}
//...
if(j>i/2)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
方法二还是包含了一些重复的数据,再优化:
方法三
方法三:如果i能够被[2, sqrt(i)]之间的任意数据整除,则i不是素数。
原因:如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m),另一个大于或等于 sqrt(m)。
int main()
{
int i = 0;
int count = 0;
for(i=101; i<=200; i++)
{
//判断i是否为素数
//2->i-1
int j = 0;
for(j=2; j<=sqrt(i); j++)
{
if(i%j == 0)
{
break;
}
}
//...
if(j>sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
继续对方法三优化
方法四
只要i不被[2, sqrt(i)]之间的任何数据整除,则i是素数,但是实际在操作时i不用从101逐渐递增到200,因为出了2和3之外,不会有两个连续相邻的数据同时为素数。
int main()
{
int i = 0;
int count = 0;
for(i=101; i<=200; i+=2)
{
//判断i是否为素数
//2->i-1
int j = 0;
for(j=2; j<=sqrt(i); j++)
{
if(i%j == 0)
{
break;
}
}
//...
if(j>sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
总结
这里写了四种方法判断和打印100~200的素数,每一种方法都是前一种方法的优化。如果对大家有用的话,可以关注加三连,持续更新,也可以私信我哦~
边栏推荐
- 24.全局事件总线
- Feature Selective Anchor-Free Module for Single-Shot Object Detection
- 全国职业院校技能大赛网络安全B模块 缓冲区溢出漏洞
- 全国职业院校技能大赛网络安全B模块 Windows操作系统渗透测试
- php链路日志方案
- Reptile learning - Overview
- GBK code in idea is converted to UTF-8 format ctrl+c+v one second solution perfect solution for single code file escape
- 24. Global event bus
- Selenium basic knowledge paging processing
- Flinksql UDF custom data source
猜你喜欢

Jackson parsing JSON detailed tutorial

Deep learning two or three things - review those classical convolutional neural networks

Kali安装pip以及pip换源
![[hiflow] Tencent cloud hiflow scene connector realizes intelligent campus information management](/img/a9/7cdab9264902b1e2947a43463f6b32.png)
[hiflow] Tencent cloud hiflow scene connector realizes intelligent campus information management
![[sklearn] RF cross validation out of bag data parameter learning curve grid search](/img/1f/936e4fe42ed97de2c3caa3f025744d.png)
[sklearn] RF cross validation out of bag data parameter learning curve grid search

【HiFlow】腾讯云HiFlow场景连接器实现校园信息管理智能化

Influxdb未授权访问&CouchDB权限绕过

从零开始C语言精讲篇3:函数

二维平面多段线Y轴最短距离

Feature Selective Anchor-Free Module for Single-Shot Object Detection
随机推荐
Selenium basic knowledge paging processing
Who can stand it when the project goes online
Using bidirectional linked list to realize stack (c)
23. Component customization events
Win10 sound icon has no sound
Deep analysis of data storage in memory
C language file operation
Arduino 超级省电之休眠模式用1节18650电池工作17年
给一个字符串 ① 请统计出其中每一个字母出现的次数② 请打印出字母次数最多的那一对
23.组件自定义事件
简易网闸-内网服务器安全获取外网数据
Advanced part of Nacos
二维平面多段线Y轴最短距离
基于VSCode聊聊编译器那些事儿
mysql查询当前节点的所有父级
C language advanced part II Pointer
A great hymn
觉维设计响应式布局
Influxdb未授权访问&CouchDB权限绕过
Jackson parsing JSON detailed tutorial