牛客网 PAT 乙级 1003 数素数 (20)

题目链接:https://www.nowcoder.com/pat/6/problem/4079

前言:这题我写的很迷,做了快一个小时,稀里糊涂地通过了,那个判断素数的函数怎么写都写不对,超级丧

题目要点: 1. 没有什么特别的,就是一个素数一个素数的数(三声)数(四声),数到第M个的时候开始输出,到第N个的时候结束,然后在输出形式的时候做一些变化。很简单是吧?可为毛我做不出来。。。

2. m n 就不用说了,就是题干中的M N

3. IsPrime() 是判断素数的函数,返回1表示是素数,返回0表示不是。而且 可以用 i<=x/2或i<=sqrt(x);直接用i<x,会报超时的。

4. p 表示是第几个的素数,与m比较,判断何时开始输出。

5. count 表示输出了几个数,每输出了十个(count%10==0),就输出一个回车,否则就输出一个空格。

6. i 是数,按2 3 4 5 6 ……的顺序变化。为什么要从2开始判断素数呢?因为我的IsPrime()中没有做x=1的判断,哈哈哈,我好懒。

7. 行末没有多余的空格,我直接在循环里将最后一个数单独拿出来输出,又是在偷懒,哈哈哈。

8. 循环里有很多括号,还是要注意下的。

下面是完整代码:

#include<stdio.h>
#include<math.h>
#include<string.h>
 
int IsPrime( int x) {
     int ret =  1 ;
     int i;
     for (i =  2 ; i <= sqrt(x); i++) {
         if (x%i ==  0 ) {
             ret =  0 ;
             break ;
         }
     }
     return ret;
}
 
 
int main() {
     int m, n;
     scanf( "%d %d" , &m, &n);
 
     int p =  0 ;
     int count =  0 ;
     int i;
     for (i =  2 ; p < n;i++) {
         if (IsPrime(i) ==  1 ) {
             p++;
             if (p >= m&&p != n) {
                 printf( "%d" , i);
                 count++;
                 if (count %  10 ==  0 )
                     printf( "\n" );
                 else
                     printf( " " );
             }
             else if (p == n)
                 printf( "%d" , i);
         }
     }
 
 
     return 0 ;
 
}


(~ ̄▽ ̄)~

测试点

测试点结果用时(ms)内存(KB)
1答案正确3384
2答案正确3380
3答案正确30384
4答案正确3264
5答案正确3384
6答案正确3376
7答案正确3384

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值