黑马程序员技术交流社区

标题: 如何用编程来统计1到100里的素数,感觉没啥规律!!! [打印本页]

作者: YMW    时间: 2016-6-9 12:34
标题: 如何用编程来统计1到100里的素数,感觉没啥规律!!!
前几天看到一个题目,请用编程统计1到100里的素数,开始就懵了,我连素数都不知道,素数和质数有区别吗?感觉没什么规律可以找,反正就是编了下,感觉没错误但是就是输出不了结果,有大神能给个比较简单的程序吗,不要太复杂了  谢谢
作者: ancheng    时间: 2016-6-9 12:45
  1. public class isPrime2 {

  2.         public static void main(String[] args) {
  3.                 // 在素数中除了2,其他都是奇数,所以初始值如果为奇数并大于2,便可以只判断奇数以提高效率
  4.                 for (int i = 101; i <= 999; i += 2) {
  5.                         boolean flag = true;
  6.                         for (int j = 2; j < i; j++) {
  7.                                 if (i % j == 0) {
  8.                                         flag = false;
  9.                                         break;
  10.                                 }
  11.                         }
  12.                         if(flag){
  13.                                 System.out.println(i);
  14.                         }
  15.                 }
  16.         }
  17. }
复制代码

作者: ancheng    时间: 2016-6-9 12:46
  1. import java.util.Scanner;

  2. public class IsPrime {
  3.         private static Scanner sc;
  4.        
  5.         public static void main(String[] args) {
  6.        
  7.                 sc = new Scanner(System.in);
  8.                 long n = sc.nextLong();
  9.                 if(isPrime(n)){
  10.                         System.out.println(n+" 是素数");
  11.                 }else{
  12.                         System.out.println(n+ " 不是素数");
  13.                 }
  14.         }
  15.         public static boolean isPrime(long n) {
  16.                 if (n <= 3) {
  17.                         return n > 1;
  18.                 }
  19.                 if (n % 2 == 0 || n % 3 == 0) {
  20.                         return false;
  21.                 }

  22.                 for (int i = 5; i <= Math.sqrt(n); i += 6) {
  23.                         if (n % i == 0 || n % (i + 2) == 0) {
  24.                                 return false;
  25.                         }
  26.                 }
  27.                 return true;
  28.         }
  29. }
复制代码

作者: ancheng    时间: 2016-6-9 12:48
  1. //第三种解法(筛选法)
  2. public class Ancheng {

  3.         public static void main(String[] args) {
  4.                 boolean[] arr = new boolean[1000];
  5.                 arr[2] = true;
  6.                 for (int i = 2; i < arr.length; i++) {
  7.                         if (i % 2 == 1) {
  8.                                 arr[i] = true;
  9.                         }
  10.                 }

  11.                 for (int i = 3; i < 1000 / 2; i += 2) {
  12.                         if (arr[i]) {
  13.                                 for (int j = 2 * i; j < 1000; j += i) {
  14.                                         arr[j] = false;
  15.                                 }
  16.                         }
  17.                 }
  18.                 for (int i = 101; i < 1000; i++) {
  19.                         if (arr[i]) {
  20.                                 System.out.println(i);
  21.                         }
  22.                 }
  23.         }
  24. }
复制代码

作者: YMW    时间: 2016-6-9 13:42
ancheng 发表于 2016-6-9 12:48

谢谢大神指点

作者: 黑猫的消失    时间: 2016-6-9 13:54
好多不同的思路,学习了




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