A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

用java判断101-200之间有多少个素数,并输出所有素数。

17 个回复

倒序浏览
  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.                 }
复制代码
回复 使用道具 举报
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);
                }
        }

}
回复 使用道具 举报
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);
      }               
        }
}
回复 使用道具 举报
上面那个用true false判断的,有一句语句冗余了,if(b==true)改为if(b)就行了,当时手抽了
回复 使用道具 举报 1 0
这也就是一个循环判断的问题,从101遍历到200,判断是否只能整除本身和1,是的话为素数
回复 使用道具 举报
姜浩 中级黑马 2014-11-2 00:51:32
7#
  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:29
8#
姜浩 发表于 2014-11-2 00:51
我的这种没有楼上几个同学的效率高,但是贵在好理解。

其实,好理解就是效率!楼主写的非常规范,赞一个!
回复 使用道具 举报
姜浩 中级黑马 2014-11-2 10:49:26
9#
Hosing 发表于 2014-11-2 10:46
其实,好理解就是效率!楼主写的非常规范,赞一个!

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

num不是应该小于2吗?????????
回复 使用道具 举报
Hosing 发表于 2014-11-2 10:50
num不是应该小于2吗?????????

素数是只能被1和自身整除, 被整除1次num就+1; 只有num等于2的数,才是素数。
回复 使用道具 举报 1 0
不错喔,不错喔,不错喔,不错喔!
回复 使用道具 举报
姜浩 发表于 2014-11-2 00:51
我的这种没有楼上几个同学的效率高,但是贵在好理解。

你的思路和楼上的几位不同,非常好的方法
回复 使用道具 举报
使用标签也可以
  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.         }
复制代码
回复 使用道具 举报
姜浩 发表于 2014-11-2 11:16
素数是只能被1和自身整除, 被整除1次num就+1; 只有num等于2的数,才是素数。 ...

sodesnai!......
回复 使用道具 举报
关键就是理解
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+"组素数");
回复 使用道具 举报
这是算法的思想,效率稍微高一点
回复 使用道具 举报
  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. }
复制代码


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马