1.题目:判断101到200之间有多少个素数,并输出所有素数
题目分析:判断一个数是否为素数,只需要判断这个数有没有除1和它自身外的其他因数。因此,判断这个数能否被2-它的平方根中的任意一个数整除即可。
题目来源:http://blog.sina.com.cn/s/blog_60fafdda0100wb21.html
程序主要两个主体,一个是对101到200之间的数进行循环,一个是对每个数进行判断。
Java代码实现:
1 public class FindPrimeNumber { 2 /* 3 * 定义方法FindCount寻找m~n之间的素数 4 */ 5 int FindCount(int m,int n){ 6 int Count = 0; 7 for(int i=m;i<=n;i++) {// 对m~n间的每个数进行判断 8 int flag = 1; 9 for(int j=2;j<=i/2;j++) {//判断这个数是否为素数 10 if(i%j==0) { 11 flag = 0; 12 break; 13 } 14 } 15 if(flag==1) { 16 Count += 1; 17 System.out.print(i+","); 18 } 19 } 20 return Count; 21 } 22 /* 23 * 上面这个方法其实可以分成两个方法,一个方法对m~n之间的数进行循环 24 * 一个方法判断这个数是否为素数 25 * 26 */ 27 28 public static void main(String args[]) { 29 FindPrimeNumber x = new FindPrimeNumber(); 30 int m=101,n=200; 31 int Sum = x.FindCount(m, n); 32 System.out.println(""); 33 System.out.printf("%d到%d之间有%d个素数",m,n,Sum); 34 } 35 }
对于Java,如果通过定义两种方法而不是单纯一种方法解决问题,代码应该会更加简洁一些
Python实现:
1 # -*- coding: utf-8 -*- 2 import math 3 ''' 4 判断x是否为素数,只需对2~sqrt(x)这些数进行判断即可(也可以对2~n/2进行判断) 5 因为若是有大于sqrt(x)的因数,则必然存在相对应的小于sqrt(x)的因子 6 使用sqrt()和ceil()方法,因此导入math模块 7 ''' 8 def FindPrimeNumber(m, n): 9 Sum = 0; 10 for x in range(m,n+1):# 对m~n间的数进行循环判断 11 flag = True 12 for i in range(2,math.ceil(math.sqrt(x))+1):#这里一定要将sqrt(x)包含进循环之中 13 if x%i == 0:# 除了1和它本身以外不再有其他因数,称为素数 14 flag = False 15 break 16 if flag == True: 17 Sum = Sum + 1 18 print(str(x)+",",end="")#这里使用end=""能控制输出不自动换行 19 return Sum; 20 21 if __name__ == '__main__': 22 M = 101 23 N = 200 24 Count = FindPrimeNumber(M, N) 25 print(' {}和{}之间有{}个素数'.format(M, N, Count))