C语言素数判定
题目:
给定一个正整数N,你能判断它是否是素数吗?
建议写一个函数来实现判断素数的功能。
Input
输入首先包含一个正整数C(C<=20),表示有C组测试用例。
接下来C行,每行包括一个正整数N(N<=2000000000)。
Output
对于每组的数据N,如果是素数,则请输出“YES”,否则,请输出“NO”。
每组数据输出一行。
Sample Input
2
5
9
Sample Output
YES
NO
一、首先明确素数是什么?
素数又叫质数,是只能被1或者自身整除的大于1的正整数。
二、如何判断一个数是否为素数呢?
遍历从2到n-1的每个数,与这个数整除。若其中一个数整除结果为0,则这个数不是素数;反之则是素数。
三、优化思路
但是我们可以进行优化,因为一个合数总是能够找到两个数相乘等于它。而这两个数都必定小于等于这个数的开方
即 n=a*b a<=sqrt(n) & b<=sqrt(n)
因此,判断范围从2~n-1 ; 变为2~sqrt(n)。在较大数据判断时优势明显。
四、代码实现
建立一个判断一个数是否为素数的函数 pd。
f 初始化为1,代表一开始默认这个数是素数。经过循环判断后,若 f 仍为1,则说明这个数是素数,函数返回值为 1。
注意:因为题目规定的输入没有排除1,所以较为特殊的1需要单独处理 。
int pd