L1-028 判断素数 10分

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!给忘了特判,我不知道1不是素数,2是素数!1不是素数啊啊啊啊!!!!1竟然不是素数!!!!2是素数!!!少了特判1的4分,好啊好。吃亏了长心了下次。简直惭愧,在考场上这道素数的题都没拿满分,10分得6分,该好好反思一下了。。。。。只是改了个特判条件就Ac了,我哭了真的555555

这个题没和其他题一样对输出的空格有严格要求,可以直接printf("Yes\n")和printf("No\n")。

2的31次方约为2*1e9。

第一有错版:

        我看他数据范围很大就开了个long long谁知道其实这道题用不了那么大的数据。脑子里对素数的判断只有开根号和循环两个重要的点。考试的时候没有拿到全部的分。少了1的特判啊喂!我特判2干什么!就是基础不扎实,1和2记混了。。。

#include<stdio.h>
#include<string.h>
#include<math.h>
int n;
int main()
{
    scanf("%d",&n);
    while(n--){
        long long t;
        scanf("%lld",&t);
        if(t == 2){
            printf("Yes\n");
        }
        else{
            int flag = 0;
            for(int i = 2;i <= sqrt(t); i ++){
            if(t % i == 0){
                printf("No\n");
                flag = 1;
                break;
            }
        }
        if(flag == 0)
            printf("Yes\n");
        }
    }

    return 0;
}

第二版代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
int n;
int main()
{
    scanf("%d",&n);
    while(n--){
        long long t;
        int flag = 0;
        scanf("%lld",&t);
 !!!!!!!!!!!!!!if(t == 1){!!!!!!!!!!!!!!
            只是改了个特判条件,我哭了真的
            printf("No\n");
        }
        else{
            
            for(int i = 2;i <= sqrt(t); i ++){
            if(t % i == 0){
                printf("No\n");
                flag = 1;
                break;
            }
        }
        if(flag == 0)
            printf("Yes\n");
        }
    }

    return 0;
}

第三版:

        这里不用开long long,对1特判,1不是素数。对前三个数特判,除了1,其他2和3都是素数。其他情况在循环。如果有整除的,t % i == 0,也就是因数就退出循环。//如果这个数大于sqrt也就是从2到sqrt(t)的循环里没有满足条件的,也就是没有因数,则输出Yes,否则是No。

#include<stdio.h>
#include<string.h>
#include<math.h>
int n;
int main()
{
    scanf("%d",&n);
    while(n--){
        int t;
        int i;
        scanf("%d",&t);
        if(t == 1)//对1特判,1不是素数
            printf("No\n");
        else if(t <= 3)//对前三个数特判,除了1,其他2和3都是素数
            printf("Yes\n");
        else{//其他情况在循环
            for(i = 2;i <= sqrt(t); i ++){//只要循环到i的根号下就可以了
            if(t % i == 0 ){//如果有整除的,也就是因数
                break;
            }
            }
            if(i > sqrt(t)){//如果这个数大于sqrt也就是从2到sqrt(t)的循环里没有满足条件的,也就是没有因数,则输出Yes
                    printf("Yes\n");
                }
                else{//否则是No
                    printf("No\n");
                }
    }
    }
    return 0;
}

结果:

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值