黑马程序员技术交流社区

标题: 求质数的问题 想改进一下没什么头绪 [打印本页]

作者: 格子、    时间: 2014-5-17 20:19
标题: 求质数的问题 想改进一下没什么头绪
本帖最后由 格子、 于 2014-5-18 05:39 编辑
  1. /*
  2.         需求:
  3.                 打印输出三位数的质数
  4.         思路:
  5.                 1.三位数的质数,范围应该为100~1000
  6.                 2.质数只能被1和自身整除
  7.                 3.判断质数可以用计数器
  8.                         
  9. */
  10. class Demo
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 //确定范围100~1000
  15.                 for(int x = 100;x<1000;x++)
  16.                 {        
  17.                         //定义计数器
  18.                         int num = 0;
  19.                         
  20.                         for(int y=1;y<34;y++)
  21.                         {
  22.                                 //让他们除以1~是因为有的可能有约数存在 目前没有想到合适的条件 这样效率比较低下
  23.                                         //如果能整除就+1
  24.                                 if(x%y==0)
  25.                                         num++;
  26.                         }
  27.                         //质数只能被1或自身整除,只要计数器为1 就可以确质数
  28.                          if(num<2)
  29.                                 System.out.print(x+"\t");
  30.                 }
  31.                
  32.         }
复制代码

就是计算器判断计数器条件那,刚开始我之前判断的是到9 ,可是有几个不是质数的,于是就试着改了几个数,因为想到1000的最大公约数是33,可还是最大公约数是两个数,这么说有点牵强,现在思维有点乱!!!!!!!虽然结果是对的,但是我给说的过去的条件,求大家指点一下,不胜感激


作者: 张斌    时间: 2014-5-17 21:23
public class Test5 {

        /**
         * 5、 编程打印所有的3位质数,质数特点:只能被1和其本身整除
         * @param args
         */
        public static void main(String[] args)
        {
         //定义一个标记;
           boolean flag;
           //定义一个for循环,可以遍历到所有的三位数整数
           for(int i=100;i<=999;i++)
           {   
                   //到开始时把标记置为真。
                   flag =true;
                   //定义一个除了1以外的所有整数除数循环
                   for(int j=2;j<=Math.sqrt(i);j++)//这个Math.sqrt(i)表示取任意数
                   {  
                           // 判断除了1以外的整数相模的数是否为0
                           if(i%j==0)
                           {
                                   // 如果满足条件将不是质数,将标签置为假,不打印数据,且跳出循环
                                   flag =false;
                                   break;
                                  
                           }
                          
                   }
                   // 当标签为真是打印的为质素。
                   if(flag)
                   {
                           System.out.print(i+"\t");
                   }
           }   
        }   
}  
       
作者: 格子、    时间: 2014-5-18 05:38
张斌 发表于 2014-5-17 21:23
public class Test5 {

        /**

哥们,谢啦,你的任意数提醒了我,现在问题已经解决啦!修改后的代码如下
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //确定范围100~1000
  6.                 for(int x = 100;x<1000;x++)
  7.                 {       
  8.                         //定义计数器
  9.                         int num = 0;
  10.                         //让x除以1到自身
  11.                         for(int y=1;y<x+1;y++)
  12.                         {
  13.                                 //如果能整除就+1
  14.                                 if(x%y==0)
  15.                                         num++;
  16.                         }
  17.                         //质数只能被1或自身整除,所以只要计数器为2 就可以确质数
  18.                          if(num==2)
  19.                                 System.out.print(x+"\t");
  20.                 }
  21.                
  22.         }
复制代码

作者: 小小6456    时间: 2014-5-18 10:00
学习了。。。。。。
作者: 流沙    时间: 2014-5-18 10:08
好想法啊哈哈




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