黑马程序员技术交流社区

标题: 用java判断101-200之间有多少个素数,并输出所有素数。  [打印本页]

作者: wang90ling    时间: 2014-11-1 22:53
标题: 用java判断101-200之间有多少个素数,并输出所有素数。 
用java判断101-200之间有多少个素数,并输出所有素数。
作者: feng_0207    时间: 2014-11-1 23:10
  1. int sum, i;
  2.                 for (sum = 2; sum <= 10; sum++) {
  3.                         for (i = 2; i <= sum / 2; i++) {
  4.                                 if (sum % i == 0) {
  5.                                         break;
  6.                                 }
  7.                         }
  8.                         if (i > sum / 2) {
  9.                                 System.out.println(sum + "素数");
  10.                         }
  11.                 }
复制代码

作者: 不系之舟王    时间: 2014-11-1 23:14
public class nixu {
        public static void main(String[] args){
                for(int i = 101;i<=200;i++){
                        int n=0;
                        for(int j=2;j<i/2;j++){
                          if(i%j==0)
                                  n=n+1;
                        }
                        if(n==0)
                                System.out.println(i);
                }
        }

}

作者: 不系之舟王    时间: 2014-11-1 23:26
public class o{
        public static void main(String[] args){
      for(int i=101;i<=200;i++){
              boolean b=true;
              for(int j=2;j<=i/2;j++){
                      if(i%j==0)
                        b=false;
                          break;                    
              }
              if(b==true)
               System.out.println(i);
      }               
        }
}
作者: 不系之舟王    时间: 2014-11-1 23:28
上面那个用true false判断的,有一句语句冗余了,if(b==true)改为if(b)就行了,当时手抽了
作者: 戏言丶    时间: 2014-11-2 00:43
这也就是一个循环判断的问题,从101遍历到200,判断是否只能整除本身和1,是的话为素数
作者: 姜浩    时间: 2014-11-2 00:51
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //确定范围100~200
  6.                 for(int x = 100;x<200;x++)
  7.                 {        
  8.                         //定义计数器
  9.                         int num = 0;
  10.                         //让x除以1到自身
  11.                         for(int y=1;y<=x;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.         }
复制代码

我的这种没有楼上几个同学的效率高,但是贵在好理解。
作者: Hosing    时间: 2014-11-2 10:46
姜浩 发表于 2014-11-2 00:51
我的这种没有楼上几个同学的效率高,但是贵在好理解。

其实,好理解就是效率!楼主写的非常规范,赞一个!
作者: 姜浩    时间: 2014-11-2 10:49
Hosing 发表于 2014-11-2 10:46
其实,好理解就是效率!楼主写的非常规范,赞一个!

编写代码和人的思想是挂钩的,当时就想到了这么个粗浅的办法。但是和楼上的同学们比了一下,
确实效率没有他们高,并且还浪费资源。   大家可以研究研究楼上同学的代码。
作者: Hosing    时间: 2014-11-2 10:50
姜浩 发表于 2014-11-2 00:51
我的这种没有楼上几个同学的效率高,但是贵在好理解。

num不是应该小于2吗?????????
作者: 姜浩    时间: 2014-11-2 11:16
Hosing 发表于 2014-11-2 10:50
num不是应该小于2吗?????????

素数是只能被1和自身整除, 被整除1次num就+1; 只有num等于2的数,才是素数。
作者: Mr.JUN    时间: 2014-11-2 12:11
不错喔,不错喔,不错喔,不错喔!
作者: yaodd321    时间: 2014-11-2 12:43
姜浩 发表于 2014-11-2 00:51
我的这种没有楼上几个同学的效率高,但是贵在好理解。

你的思路和楼上的几位不同,非常好的方法
作者: yaodd321    时间: 2014-11-2 13:12
使用标签也可以
  1. public class PrimeNumber {

  2.         public static void main(String[] args) {
  3.                 IsPrime2();
  4.         }

  5.         private static void IsPrime2() {
  6.                 int sum = 0;
  7.                 outer:
  8.                 for(int i=101;i<200;i++){
  9.                         for(int j = 2;j<i/2;j++){
  10.                                 if(i%j == 0)
  11.                                         continue outer;
  12.                         }
  13.                         System.out.println(i+"是素数");
  14.                         ++sum;
  15.                 }
  16.                 System.out.println("一共"+sum+"组素数");
  17.         }
复制代码

作者: Hosing    时间: 2014-11-2 18:22
姜浩 发表于 2014-11-2 11:16
素数是只能被1和自身整除, 被整除1次num就+1; 只有num等于2的数,才是素数。 ...

sodesnai!......
作者: zhangyangLengen    时间: 2014-11-2 18:37
关键就是理解
a=i*j;(i<j)
    i^2<a<j^2;
    i<sqrt(a)<j
int sum = 0;
                outer:
                for(int i=101;i<200;i++){
                        for(int j = 2;j<sqrt(i);j++){
                                if(i%j == 0)
                                        continue outer;
                        }
                        System.out.println(i+"是素数");
                        ++sum;
                }
                System.out.println("一共"+sum+"组素数");
作者: zhangyangLengen    时间: 2014-11-2 18:38
这是算法的思想,效率稍微高一点

作者: javaAndroid    时间: 2014-11-2 21:19
  1. package Test;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. public class Test003 {

  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 List<Integer> list = new ArrayList<Integer>();        // 一个List,用于存放素数
  8.                 for(int i=101;i<=200;i++){                // 遍历101-200,依次检查
  9.                         if(isSushu(i)){
  10.                                 list.add(i);
  11.                         }
  12.                 }
  13.                 // 输出结果
  14.                 System.out.println("101-200之间一共有"+list.size()+"个素数。分别为:");
  15.                 for (int i : list) {
  16.                         System.out.print(i+" ");
  17.                 }
  18.         }
  19.         /**
  20.          * 检查一个数是否为素数
  21.          * @param num 需要检查的数字
  22.          * @return 返回检查结果
  23.          * */
  24.         static boolean isSushu(int num){
  25.                 for(int i=2;i<num/2;i++){
  26.                         if(num%i==0){
  27.                                 return false;
  28.                         }
  29.                 }
  30.                 return true;
  31.         }
  32. }
复制代码







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