牛客网 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

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

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

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

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

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

下面是完整代码:

#include
#include
#include
 
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 答案正确 3 384
2 答案正确 3 380
3 答案正确 30 384
4 答案正确 3 264
5 答案正确 3 384
6 答案正确 3 376
7 答案正确 3 384

你可能感兴趣的:(牛客网 PAT 乙级 1003 数素数 (20))