题目描述:令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。
输入描述:
输入在一行中给出M和N,其间以空格分隔。
输出描述:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入例子:
5 27
输出例子:
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103解析:
注意事项:
- 数组注意下表与M,N的对应;
- 为图方便直接声明了大小为MAXSIZE的数组,array[M]存的PM,故而数组必须超过10000,否则输入为10000,10000时就会出现数组array[10000]数组访问越界的错误;
- 输出格式要注意:要求每十个数字要换行,且行末不可有空格。
解法实例:
1
#include<iostream>
#include<cmath>
int main()
{
using namespace std;
int m,n,count = 0;
cin >> m >> n;
for (int i = 2;count <= n;i++)
{
int temp = 0;
for (int j = 2;j <= sqrt(i);j++)
if (i % j == 0)
++temp;
if (temp == 0)
++count;
if (count >= m && count <= n && temp == 0)
{
cout << i;
if ((count - m) % 10 == 9)
cout << "\n";
else if (count != n)
cout << " ";
}
}
cout << endl;
return 0;
}
2
import
java.util.Scanner; public
class
Main { public
static
void
main(String[] args) { //
TODO Auto-generated method stub Scanner
in = new
Scanner(System.in); int
begin = in.nextInt(); int
end = in.nextInt(); in.close(); int []
array = new
int [end]; int
index = 0 ; int
i = 2 ; while
(index < end) { if
(Isprime(i)) { array[index]
= i; index++; } i++; } int
ten = 0 ; for
( int
j = (begin - 1 );
j < end; j++) { System.out.print(array[j]); ten++; if
(ten % 10
== 0 )
{ System.out.println(); continue ; } if
(j != end - 1 )
{ System.out.print( "
" ); } } } public
static
boolean
Isprime( int
n) { if
(n == 1 )
{ return
false ; } else
if
(n == 2 )
{ return
true ; } else
if
(n % 2
== 0 )
{ return
false ; } else
{ for
( int
i = 3 ;
i <= ( int )Math.sqrt(n);
i += 2 )
{ if
(n % i == 0 )
{ return
false ; } } return
true ; } } }
|
#include<stdio.h> #include<math.h> int
is_prime( int
num) { int
i; if (num==2) return
1; else { for (i=2;i<= sqrt (num);i++) { if (num%i==0) return
0; } } return
1; } int
main() { int
m,n,num,i=0,count=0; scanf ( "%d
%d" ,&m,&n); for (num=2;1;num++) { if (is_prime(num)) { i++; if (i>=m&&i<n) { count++; if (count==10) { printf ( "%d\n" ,num); count=0; } else { printf ( "%d
" ,num); } } else
if (i==n) { printf ( "%d" ,num); break ; } } } }
|