2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 试除法判定质数 试除法分解质因数(附例题)

试除法判定质数 试除法分解质因数(附例题)

时间:2023-06-01 17:34:42

相关推荐

试除法判定质数 试除法分解质因数(附例题)

试除法判定质数

无论在何种情况下,时间复杂度都是O(sqrt(n))

acwing.866.试除法判断质数

试除法判断质数

给定n个正整数ai,判定每个数是否是质数。

输入格式

第一行包含整数n。

接下来n行,每行包含一个正整数ai。

输出格式

共n行,其中第 i 行输出第 i 个正整数ai是否为质数,是则输出“Yes”,否则输出“No”。

数据范围

1 ≤ n ≤ 100,

1 ≤ ai ≤ 231−1

输入样例:

226

输出样例:

YesNo

AC代码:

#include <bits/stdc++.h>using namespace std;bool isprime(int n){if(n<2)return false;for(int i=2;i<=n/i;i++){if(n%i==0)return false;}return true;}int main(){ios::sync_with_stdio(false);cin.tie(0);int n;cin>>n;while(n--){int a;cin>>a;if(isprime(a))cout<<"Yes"<<'\n';else cout<<"No"<<'\n';}return 0;}

注意点:

一开始要判定n小于2的情况for(int i=2;i<=n/i;i++)中的i<=n/i,不能写成i*i<=n,极端情况下会爆;也不建议写成i<=sqrt(n),因为sqrt很慢

试除法分解质因数

n中最多只包含一个大于sqrt(n)的质因子,这个唯一的落网之鱼就是其本身就是质数,比如37。最坏情况下,时间复杂度为O(sqrt(n)),但一般在O(logn)到O(sqrt(n))之间。直接枚举1到n就可以,因为当我们枚举到i的时候,就意味着我们已经把从2到i-1之间的质因子除干净了,因此i一定是质数。

AcWing867. 分解质因数

给定n个正整数ai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。

输入格式

第一行包含整数n。

接下来n行,每行包含一个正整数ai。

输出格式

对于每个正整数ai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。

每个正整数的质因数全部输出完毕后,输出一个空行。

数据范围

1≤n≤100,

1≤ai≤2∗109

输入样例:

268

输出样例:

2 13 12 3

AC代码:

#include <bits/stdc++.h>using namespace std;void divide(int n){for(int i=2;i<=n/i;i++){if(n%i==0){int s=0;while(n%i==0)n/=i,s++;cout<<i<<' '<<s<<'\n';}}if(n>1)cout<<n<<' '<<1<<'\n';cout<<'\n';}int main(){ios::sync_with_stdio(false);cin.tie(0);int n,a;cin>>n;while(n--){cin>>a;divide(a);}return 0;}

注意点:

以上。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。