[C语言]素数的判定(优化)

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值