[题] 试除法判定质数 #质数(素数) #试除法

编程入门 行业动态 更新时间:2024-10-13 02:18:59

[题] 试除法判定<a href=https://www.elefans.com/category/jswz/34/1764968.html style=质数 #质数(素数) #试除法"/>

[题] 试除法判定质数 #质数(素数) #试除法

题目

AcWing 866. 试除法判定质数


思路

首先是暴力枚举
时间:O( (n) ))

bool is_prime(int n){//朴素判定(暴力)if(n < 2) return 0;//小于2的数不在范围内,直接排除for(int i = 2; i < n; i ++)//枚举从2到n-1if(n % i == 0)//如果可以整除某一个数return 0;//就说明不是质数return 1;
}
时间复杂度是O(n),效率低。

优化:限定范围。
原理:约数是一对一对的,所以每次枚举较小的一个约数就好。
时间:O( sqrt(n) )

  bool is_prime(int n){//优化写法if(n < 2) return 0;//小于2的数不在范围内,直接排除for(int i = 2; i <= n / i; i ++)//当i <= n/i 时,说明还没有遍历到重复的约数组/*注意不要写成for(int i = 2; i * i <= n; i ++),会溢出注意不要写成for(int i = 2; i <= sqrt(n); i ++),每次执行sqrt(n)都耗费时间*/if(n % i == 0)//如果可以整除某一个数return 0;//就说明不是质数return 1;
}

代码

#include<bits/stdc++.h>
using namespace std;bool i(int n){//优化写法if(n < 2) return 0;//小于2的数不在范围内,直接排除for(int i = 2; i <= n / i; i ++)//枚举从到n/iif(n % i == 0)//如果可以整除某一个数return 0;//就说明不是质数return 1;
}
int main(){int n;cin >> n;while(n --){int a;cin >> a;if(i(a)) cout << "Yes" << endl;else cout << "No" << endl;}return 0;
}

更多推荐

[题] 试除法判定质数 #质数(素数) #试除法

本文发布于:2023-12-06 07:25:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1666865.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:质数   除法   素数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!