算法日记数学知识篇------试除法判断质数

219 阅读1分钟

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

输入格式

第一行包含整数 n。

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

输出格式

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

数据范围

1≤n≤100
1≤ai≤2^31−1

输入样例:

2
2
6

输出样例:

Yes
No

题目分析

一个数的因数都是成对出现的:例如12的因数有3和4,2和6 所以我们可以只枚举较小的那一个,即根下n,假设较小的为d,较大的为n/d;

微信图片_20220322103803.png 时间复杂度 :√n

代码实现

比特截图2022-03-22-10-40-59.png

代码优化

  • 检测素数可以分为检测2和其他素数
  • 从3开始,其他都可以i += 2,以2为步进,比i++少了一半次数
  • 每次计算i <= x / i也很花时间,可以先来计算y = sqrt(x),再用i <= y

代码又是什么样的呢?

比特截图2022-03-22-11-03-28.png