黑马程序员技术交流社区

标题: 0<N<M<=100000 求第N个素数到第M个素数之间所有素数的和 包括... [打印本页]

作者: hnxtzouyuxi    时间: 2015-9-24 22:22
标题: 0<N<M<=100000 求第N个素数到第M个素数之间所有素数的和 包括...
  1. package com.yuxi.day0923;

  2. public class Test4 {

  3.         /*
  4.          * 0<N<M<=100000 求第N个素数到第M个素数之间所有素数的和 包括N和M
  5.          */
  6.         public static void main(String[] args) {
  7.                 System.out.println(theNumPrimeSum(4,56767));
  8.         }
  9.         // 求素数的方法
  10.         public static boolean boolPrime(int n) {
  11.                 boolean flag = false;
  12.                 if (n == 1) {
  13.                         return flag;
  14.                 } else if (n == 2) {
  15.                         flag = true;
  16.                 } else {
  17.                         int num = 2;
  18.                         while (true) {
  19.                                 if (n % num == 0) {
  20.                                         break;
  21.                                 } else if (num > Math.sqrt(n)) {
  22.                                         flag = true;
  23.                                         break;
  24.                                 }
  25.                                 num++;
  26.                         }
  27.                 }
  28.                 return flag;
  29.         }
  30.         // 求素数和的方法并打印出结果
  31.         public static void sumPrime(int n, int m) {
  32.                 int sum = 0;
  33.                 if (n > m) {
  34.                         int temp = n;
  35.                         n = m;
  36.                         m = temp;
  37.                 }
  38.                 if (n > 0 && n <= 200) {
  39.                         for (int i = n; i <= m; i++) {
  40.                                 if (boolPrime(i)) {
  41.                                         sum += i;
  42.                                 }
  43.                         }
  44.                         System.out.println(n + "与" + m + "之间的质数和是" + sum);
  45.                 } else
  46.                         System.out.println("你的数据有误");
  47.         }
  48.         //求出第num个质数是什么
  49.         public static int theNumPrime(int num) {
  50.                 int thenum = 0;
  51.                 int number = 0;
  52.                 int n = 2;
  53.                 while (true) {
  54.                         if (boolPrime(n)) {
  55.                                 number++;
  56.                                 if (num == number) {
  57.                                         thenum = n;
  58.                                         break;
  59.                                 }
  60.                         }
  61.                         n++;
  62.                 }
  63.                 return thenum;
  64.         }
  65.         //求第num1到num2这间的质数和
  66.         public static int theNumPrimeSum(int num1, int num2) {

  67.                 int sum = 0;
  68.                 int a = theNumPrime(num1);
  69.                 int b = theNumPrime(num2);
  70.                 for (int i = a; i <= b; i++) {
  71.                         if (boolPrime(i)) {
  72.                                 sum += i;
  73.                         }
  74.                 }
  75.                 return sum;
  76.         }
  77. }
复制代码



作者: 弗人    时间: 2015-10-7 12:04
正好不会,碰到了这个答案。
作者: 超の    时间: 2015-10-7 12:13
好些没看懂啊!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2