PAT乙级(Basic Level)真题 1003.数素数
2016-11-21 22:16
295 查看
题目地址
http://www.nowcoder.com/pat/6/problem/4079
解题思路——埃拉托斯特尼筛法
筛法思想:素数的倍数一定不是素数
代码思路:开2个数组,分别存放{筛出来的素数}、{2.3.5.7.11...最大可能的素数}。先设所有的数都是素数,然后从2开始,逐个排除该素数的所有倍数,剩下的数就是素数,存入素数数组。
思路来源:Shura
AC代码如下:
http://www.nowcoder.com/pat/6/problem/4079
解题思路——埃拉托斯特尼筛法
筛法思想:素数的倍数一定不是素数
代码思路:开2个数组,分别存放{筛出来的素数}、{2.3.5.7.11...最大可能的素数}。先设所有的数都是素数,然后从2开始,逐个排除该素数的所有倍数,剩下的数就是素数,存入素数数组。
思路来源:Shura
AC代码如下:
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; const int M = 10001; const int N = 104730;//第10000个素数是104729 int prime[M]; int number ; int main() { int m,n; scanf("%d%d",&m,&n); memset(number,1,sizeof(number));//设2~N全都是素数 int tot=0; for( int i=2;i<=N;++i ){ if( number[i]==1 ){//将第一个数(2)和没有被排除的数存入素数数组 prime[tot++] = i; } for( int j=2*i;j<=N;j+=i ){//排除素数i的所有倍数 number[j] = 0; } } int printed=0,isfirst=1; for( int i=m-1;i<n;++i ){ if( isfirst ){ printf("%d",prime[i]); isfirst=0; ++printed; } else{ printf(" %d",prime[i]); ++printed; } if( printed%10==0 ){//打印,满十换行 printf("\n"); isfirst=1; } } return 0; }
相关文章推荐
- PAT乙级(Basic Level)真题1003数素数 (20)
- PAT乙级真题及训练集 PAT (Basic Level) Practise (中文)1013. 数素数
- PAT乙级(Basic Level)真题-1003 数素数 (20)
- PAT乙级(Basic Level)真题 数素数(素数筛法)
- PAT乙级真题及训练集 PAT (Basic Level) Practise (中文)1007. 素数对猜想
- PAT乙级(Basic Level)真题 >数字分类
- PAT乙级(Basic Level)真题-1019 旧键盘 (20)
- PAT乙级(Basic Level)真题 >福尔摩斯的约会
- PAT乙级(Basic Level)真题 >组个最小数
- PAT乙级(Basic Level)真题 >旧键盘打字
- 【PAT 乙级(Basic Level)】数素数
- PAT乙级(Basic Level)真题-1001 A+B和C (15)
- PAT 乙级 Basic Level 1007. 素数对猜想(素数筛法)
- PAT乙级真题及训练集 PAT (Basic Level) Practise (中文)1009. 说反话
- PAT乙级(Basic Level)真题-1027 在霍格沃茨找零钱(20)
- PAT乙级(Basic Level)真题 >反转链表
- PAT乙级(Basic Level)真题 >完美数列
- PAT乙级(Basic Level)真题 >插入与归并
- PAT乙级(Basic Level)真题-1002 数字分类 (20)
- PAT乙级(Basic Level)真题-1026 跟奥巴马一起编程(15)