Python和Java编程题(三)

时间:2023-03-08 19:51:29
Python和Java编程题(三)

1.题目:判断101到200之间有多少个素数,并输出所有素数

题目分析:判断一个数是否为素数,只需要判断这个数有没有除1和它自身外的其他因数。因此,判断这个数能否被2-它的平方根中的任意一个数整除即可。

题目来源:http://blog.sina.com.cn/s/blog_60fafdda0100wb21.html

程序主要两个主体,一个是对101到200之间的数进行循环,一个是对每个数进行判断。

Java代码实现:

 public class FindPrimeNumber {
/*
* 定义方法FindCount寻找m~n之间的素数
*/
int FindCount(int m,int n){
int Count = 0;
for(int i=m;i<=n;i++) {// 对m~n间的每个数进行判断
int flag = 1;
for(int j=2;j<=i/2;j++) {//判断这个数是否为素数
if(i%j==0) {
flag = 0;
break;
}
}
if(flag==1) {
Count += 1;
System.out.print(i+",");
}
}
return Count;
}
/*
* 上面这个方法其实可以分成两个方法,一个方法对m~n之间的数进行循环
* 一个方法判断这个数是否为素数
*
*/ public static void main(String args[]) {
FindPrimeNumber x = new FindPrimeNumber();
int m=101,n=200;
int Sum = x.FindCount(m, n);
System.out.println("");
System.out.printf("%d到%d之间有%d个素数",m,n,Sum);
}
}

对于Java,如果通过定义两种方法而不是单纯一种方法解决问题,代码应该会更加简洁一些

Python实现:

 # -*- coding: utf-8 -*-
import math
'''
判断x是否为素数,只需对2~sqrt(x)这些数进行判断即可(也可以对2~n/2进行判断)
因为若是有大于sqrt(x)的因数,则必然存在相对应的小于sqrt(x)的因子
使用sqrt()和ceil()方法,因此导入math模块
'''
def FindPrimeNumber(m, n):
Sum = 0;
for x in range(m,n+1):# 对m~n间的数进行循环判断
flag = True
for i in range(2,math.ceil(math.sqrt(x))+1):#这里一定要将sqrt(x)包含进循环之中
if x%i == 0:# 除了1和它本身以外不再有其他因数,称为素数
flag = False
break
if flag == True:
Sum = Sum + 1
print(str(x)+",",end="")#这里使用end=""能控制输出不自动换行
return Sum; if __name__ == '__main__':
M = 101
N = 200
Count = FindPrimeNumber(M, N)
print('\n{}和{}之间有{}个素数'.format(M, N, Count))