黑马程序员技术交流社区

标题: 又是一道很多人都做不出来的基础题 [打印本页]

作者: 更上一层    时间: 2014-9-22 23:34
标题: 又是一道很多人都做不出来的基础题
  1. package com.itheima;

  2. /**
  3. * 第8题、 编程打印所有的3位质数,质数特点:只能被1和其本身整除
  4. *
  5. *        
  6. *
  7. */

  8. public class Test8 {

  9.         /**
  10.          * @param args
  11.          */
  12.         public static void main(String[] args) {
  13.                
  14.                 boolean flag = true;
  15.        
  16.                 for(int j = 2;j<=999;j++){
  17.                        
  18.                         for(int i=2;i<=j/2;i++){
  19.                                 if(j%i==0){
  20.                                         flag = false;
  21.                                         break;
  22.                                 }
  23.                         }
  24.                         if(flag){
  25.                                 System.out.println(j);
  26.                         }
  27.                         flag = true;
  28.                        
  29.                 }

  30.                
  31.         }

  32. }
复制代码

作者: 陈兆辉    时间: 2014-9-23 10:23
不是求3位的质数么,为什么外循环要从2开始?从100开始不就行了么?
作者: Huberry    时间: 2014-9-23 11:21
  1. //判断是否为质数,只要判断到这个数的平方根即可,往后的判断都是重复的,如果数据大的话这可以明显的提高效率

  2. public class Test110 {
  3.         public static void main(String args[]){
  4.                 for(int i=100; i<1000 ;i++){
  5.                         if(isPrime(i))
  6.                                 System.out.println(i);
  7.                 }
  8.         }
  9.         public static boolean isPrime(int num){//判断是否为质数
  10.                 for (int i=2;i*i<=num ; i++){//
  11.                         if(num%i==0)
  12.                                 return false;
  13.                 }
  14.                 return true;
  15.         }       
  16. }
复制代码

作者: w936074874    时间: 2014-9-23 20:46
质数是什么? 我可以理解为不能被2整除吗
作者: Imp_x    时间: 2014-9-23 20:56
w936074874 发表于 2014-9-23 20:46
质数是什么? 我可以理解为不能被2整除吗

除了一跟他本身之外不能被其他数整除的数,例如2、3、5、7、11、13这些


作者: THE_FUTURE    时间: 2014-9-23 21:35
质数是什么!!!!
作者: Mr_Unhappy    时间: 2014-9-23 22:44
  1. import java.util.ArrayList;
  2. import java.util.List;

  3. /**
  4. *第八题: 编程打印所有的3位质数,质数特点:只能被1和其本身整除
  5. * @author Ming
  6. *
  7. */

  8. public class Test8 {
  9.         public static void main(String[] args) {
  10.                
  11.                 //遍历所有的三位整数
  12.                 for(int i = 100;i <= 999;i++){
  13.                         panDuan(i);
  14.                 }
  15.         }
  16.         public static void panDuan(int x){
  17.                
  18.                         //创建集合用于存放x或者x的整除数
  19.                         List<Integer> list = new ArrayList<Integer>();
  20.                         list.add(x);
  21.                        
  22.                         //为了提高效率,由数学常识可是,如果一个数在他的平方根内没有整除数,就不会再有了,因此取得x的平方根,并循环
  23.                         for(int i = 2; i <= Math.sqrt(x);i++){
  24.                                
  25.                                 //如果x有整除数i就将i放入list集合中
  26.                                 if(x%i == 0){
  27.                                         list.add(i);
  28.                                 }
  29.                         }
  30.                        
  31.                         //如果list集合的长度还是1代表,x没有整除数,则讲x输出
  32.                         if(list.size() == 1)
  33.                                 System.out.println(list.get(0));
  34.                 }
  35. }
复制代码


分享一下我的算法
作者: Mr_Unhappy    时间: 2014-9-23 22:46
看完三楼的算法,我发现我逗了

作者: 逍遥呆    时间: 2014-9-24 00:29
应该从一百开始吧
作者: cherry@cookie    时间: 2014-9-25 00:58
好高端!!!
作者: wawsc5354524    时间: 2014-9-25 01:28
学习了,呵呵
作者: 姠佐メ亾佑つ    时间: 2014-9-25 04:18
  1. package com.itheimatest;

  2. /*
  3. * 题目:输入一个正整数N,打印出从1到N之间的所有质数。
  4. */
  5. import java.util.*;

  6. public class PrimeNumber_1 {

  7.         public static void main(String[] args) {

  8.                 Scanner sc = new Scanner(System.in);
  9.                
  10.                 System.out.println("输入一个大于一的正整数:");
  11.                
  12.                 int n = sc.nextInt();
  13.                
  14.                 if (n > 1)
  15.                        
  16.                         printPrimeNumber(n);
  17.                
  18.                 else
  19.                        
  20.                         System.out.println("FALSE!");

  21.         }

  22.         /*
  23.          * printPrimeNumber(int num)作用:将大于1并且小于num的质数输出 有未知参数--最大值,并且没有返回值
  24.          */
  25.        
  26.         static void printPrimeNumber(int num) {
  27.                
  28.                 int[] arr = new int[num];
  29.                
  30.                 int sum = 0;
  31.                
  32.                 for (int i = 2; i < num; i++) {// i表示需要进行判断的数
  33.                        
  34.                         int temp = 0;// temp为标志变量,如果出现和数,就改变数值,以此来判断该数是否为质数
  35.                        
  36.                         for (int j = 2; j <= i / 2; j++) {// j是用来帮助判断i的数,范围是2~i/2。
  37.                                
  38.                                 // 如果小于i/2的数都无法整除i,那么大于i/2的数也不会 整除i
  39.                                
  40.                                 if (i % j == 0) {
  41.                                        
  42.                                         temp = 1;
  43.                                        
  44.                                         break;// 一旦判断出这个数不是质数,就结束本次循环,并将标志设为1
  45.                                        
  46.                                 }
  47.                         }
  48.                        
  49.                         if (temp == 0)
  50.                                
  51.                                 arr[sum++] = i;
  52.                        
  53.                 }
  54.                
  55.                 System.out.println("在 1 到  " + num + " 之间的质数有" + (sum - 1) + "个。\n分别是:");
  56.                
  57.                 for (int i = 0; i < sum; i++)
  58.                        
  59.                         System.out.print(arr[i] + "\t");
  60.                
  61.         }

  62. }
复制代码

作者: 姠佐メ亾佑つ    时间: 2014-9-25 04:26
简单容易理解三位质数的方法;和楼上的哥们思路一样

  1. package com.itheimatest;

  2. /**
  3. * @author Administrator
  4. *
  5. *需求: 编程打印所有的3位质数,质数特点:只能被1和其本身整除
  6. *                 
  7. *                 分析:
  8. *                        判断条件:除以一个数的(2到这个数的平方根) ,若都不能整除就是质数
  9. *
  10. */
  11. public class PrimeNember_2 {
  12.        
  13.         public static void main(String[] args) {
  14.                
  15.                 int count = 0;
  16.                
  17.                 //遍历获取从100-999的所有数,即被除数
  18.                
  19.                 for(int i=100;i<1000;i++){
  20.                        
  21.                         //定义是否是质数的返回值变量
  22.                        
  23.                         boolean flag = true;
  24.                        
  25.                         //判断这个数是不是质数
  26.                        
  27.                         //除数从2开始到这个数的平方根
  28.                        
  29.                         for(int j=2;j<=Math.sqrt((double)i);j++){
  30.                                
  31.                                 if(i%j==0){
  32.                                        
  33.                                         flag = false;
  34.                                        
  35.                                         break;
  36.                                        
  37.                                 }               
  38.                                
  39.                         }
  40.                        
  41.                         if(flag){
  42.                                
  43.                                 //输出
  44.                                
  45.                                 System.out.println(i        );
  46.                                
  47.                                 count++;
  48.                                                                                        
  49.                                 System.out.println(count);
  50.                                
  51.                         }
  52.                        
  53.                 }
  54.                
  55.         }
  56.        
  57. }
复制代码

作者: 编程学徙    时间: 2014-9-25 05:20
第一次试着默写的时候写错了……没考虑到每一个数判断完了以后,要把flag赋值为true.....
  1. class ZiShu
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int i,j,k=1;
  6.                 boolean flag;
  7.                 flag = true;
  8.                 for(i=100;i<1000;i++)
  9.                 {
  10.                         for(j=2;j<=i/2;j++)
  11.                         {
  12.                                 if(i%j==0)
  13.                                 {
  14.                                         flag = false;
  15.                                         break;
  16.                                 }
  17.                         }
  18.                         if(flag)
  19.                         {
  20.                                 System.out.print(i+"\t");
  21.                                 k++;
  22.                                 if(k%5==0)
  23.                                 {
  24.                                         System.out.println();
  25.                                 }
  26.                         }
  27.                         flag = true;
  28.                 }


  29.         }
  30. }
复制代码





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