7-5 判断素数 (10分)

本题的目标很简单,就是判断一个给定的正整数是否素数。

输入格式:

输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于2
​31
​​ 的需要判断的正整数。

输出格式:

对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。

输入样例:

2
11
111

输出样例:

Yes
No


为什么判断N是否为素数时,只需要判断到sqrt(N)就可以?
因为:N=根号N*根号N
如果N含有一个大于根号N,小于N的约数a,则N必含有一个大于1,小于根号N的约数b
使得N=ab
所以如果一个数N从2到根号N之间没有约数,则必然在根号N到N-1之间也没有约数,即N是一个素数


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    int n,a,j;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&a);
        if(a==1)
        //注意对“1”的判定;
            printf("No\n");
            else
            {
                int k = (int)sqrt(a);
                /*因为所判定的数值范围较大所以对要判定的数值开方,
                但是要记得将数据类型转化为整形;*/
                for(j=2; j<=k; j++)
                {
                    if(a%j==0)
                        break;
                }
                if(j>(int)(sqrt(a)))
                    printf("Yes\n");
                else printf("No\n");
            }


    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碧羽o(* ̄▽ ̄*)ブ回雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值