365beat-beat365官方网站手机版-365账号无法登陆

【C语言】求质数(素数)的三种方法

C语言中求质数的三种方法: 1.试除法,根据质数的定义,对每个数字no进行(2~no-1)的试除 2.排除偶数法,2的倍数(除2之外),都不是质数 3.

【C语言】求质数(素数)的三种方法

C语言中求质数的三种方法:

1.试除法,根据质数的定义,对每个数字no进行(2~no-1)的试除

2.排除偶数法,2的倍数(除2之外),都不是质数

3.排除偶数法的基础上,对奇数进行奇数的试除

4.在奇数里面,判断no能否被 小于no的质数 整除

5.使用math函数的sqrt,试除法的改进,对数字进行(2~sqrt(no))的试除

1.试除法:计算1~1000以内的质数

方法1:常规遍历

#include

int main() {

int i, no;

unsigned long counter = 0;

for (no = 2; no <= 1000; no++) {

for (i = 2; i < no; i++) {

counter++;

if (no % i == 0)

break;

}

//如果最终的i==no,说明一定是质数

if (no == i)

printf("%d\n", no);

}

printf("乘除运算的次数:%lu\n", counter);

return 0;

}

2.排除偶数法:计算1~1000以内的质数

#include

int main() {

int i, no;

unsigned long counter = 0;

//单独打印no=2

no = 2;

printf("%d\n", no++);

//此时for循环中,no=3开始,步长调整为2

//过滤掉除2之外的偶数,它们都不是质数

for (; no < 1000; no += 2) {

for (i = 2; i < no; i++) {

counter++;

if (no % i == 0)

break;

}

if (no == i)

printf("%d\n", no);

}

printf("乘除运算的次数:%lu\n", counter);

return 0;

}

3.排除偶数法的基础上,对奇数进行奇数的试除

#include

int main() {

int i, no;

unsigned long counter = 0;

no = 2;

printf("%d\n", no++);

//从no=3开始,步长为2

for (; no <= 1000; no += 2) {

//在奇数里面使用奇数进行试除

for (i = 3; i < no; i += 2) {

counter++;

if (no % i == 0)

break;

}

if (no == i)

printf("%d\n", no);

}

printf("乘除运算的次数:%lu\n", counter);

return 0;

}

4.在奇数里面,判断no能否被 小于no的质数 整除

#include

int main() {

int i, no;

int prime[500];//先排除掉偶数

int ptr = 0;

unsigned long counter = 0;

//prime[0]=2,prime[1]=3,ptr=2

prime[ptr++] = 2;

prime[ptr++] = 3;

//no=5,对奇数进行遍历,

for (no = 5; no <= 1000; no += 2) {

//判断能否被小于no的质数整除

for (i = 1; i < ptr; i++) {

counter++;

if (no % prime[i] == 0)

break;

}

if (ptr == i)

prime[ptr++] = no;

}

for (i = 0; i < ptr; i++)

printf("%d\n", prime[i]);

printf("乘除运算的次数:%lu\n", counter);

return 0;

}

5.

#include

int main() {

int i, no;

int prime[500];

int ptr = 0;

unsigned long counter = 0;

prime[ptr++] = 2;

prime[ptr++] = 3;

for (no = 5; no <= 1000; no += 2) {

int flag = 0;

for (i = 1; counter++, prime[i]*prime[i] <= no; i++) {

counter++;

if (no % prime[i] == 0) {

flag = 1;

break;

}

}

if (!flag)

prime[ptr++] = no;

}

for (i = 0; i < ptr; i++)

printf("%d\n", prime[i]);

printf("乘除运算的次数:%lu\n", counter);

return 0;

}

← 上一篇: 免费看!芜湖家门口的“小世界杯”来了:2025吴钩足球比赛总决赛全攻略
下一篇: 山地跑世界杯牵手“双奥之城” 北京昌平打造中国户外运动新地标 →

相关推荐

百智大熊究竟怎么样 4.5万起售

百智大熊究竟怎么样 4.5万起售

大家现在买车的要求已经不光光是舒适了,其它配置、动力、用料、做工等方面也是重要的参考因素。现在车选择颇多,就比如我们今天说的百

淘宝新手开店卖什么比较好?怎样运营?开店教程分享

淘宝新手开店卖什么比较好?怎样运营?开店教程分享

淘宝新手开店卖什么比较好?开什么店有生意? 受疫情影响,很多实体行业都受到了极大的影响,而线上商店越来越受欢迎。因而,现在越来越

醉驾抽血结果几天能出来

醉驾抽血结果几天能出来

一、醉驾抽血结果几天能出来 通常来讲,醉驾之后抽血拿去检测,那结果一般得在3到5个工作日左右才能出来。 不过,具体要多长时间可不好说

祎字五行属什么

祎字五行属什么

● 祎 (禕) yī ㄧˉ 美好;珍贵。多用于人名。 英语 excellent 德语 exzellent, ausgezeichnet, schön, rar (Adj) 法语 (utilisé dans les prénoms)​,excellent,précieu

包含【履】的成语有哪些

包含【履】的成语有哪些

友情链接 | 关于我们 | 意见反馈 | 设为首页 | 站点地图 | 返回顶部 copyright © 2019-2020 www.zcdian.com 组词典 版权所有 组词典的部份资料来自网络或

你知道POI是什么吗?抖音视频加POI有什么好处?

你知道POI是什么吗?抖音视频加POI有什么好处?

抖音POI功能,其实也可以叫做地址功能,就是在发布视频的时候,将地址信息添加到视频上,让观看者对商家门店有更多的了解,帮助商家从线