一个判断101-200之间的素数引发的“教训”

话不多说先看体目:

请判断101-200之间的素数,并在控制打印出来。这道题源于H_Z中的Z的问题,后来才知道是java100例上的一道小测试题。

拿到题我大概分析了下。素数只能除1和本身没有余数。那么很好这明显是一个双层循环。

第一次的代码:

public class H_Z07 {

  public static void main(String[] args) {
    for(int i = 101;i < 200 ; i++){
      for(int j = 2 ;j < i ; j++){
        if(i % j == 0){
        break;
      }else{
        System.out.println(i);
      }
     }
    }

  }

}

输出为:

101

101

.....

199

199

一个很长的循环输出这个是H和Z商讨的结果,好像结果没法控制。

怎么控制呢?

Z的解决方案:

public class Z_H01 {

  public static void main(String[] args) {
    int i , j;
    for( i = 101;i < 200 ; i++){
      for(j = 2 ;j < i ; j++){
        if(i % j == 0){
          break;
        }
      }
      if(i == j){
       System.out.print(i+“ ”);
      }
    }

  }

}

运行结果:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 

完美解决,但是H好像没有懂

H在思考中....

陷入第一误区:

j的值到底等于多少好像最大是198为什么i ==j的时候j却等了199。

同时又陷入了第二个误区:

i == j的时候为什么是等等于他本身才输出为什么,不是在i % j ==0输出更加完美!!

H只能偷偷的修改代码为:

public class H_Z09 {

  public static void main(String[] args) {
    int i , j;
    for( i = 101;i < 200 ; i++){
    for(j = 2 ;j < i ; j++){
      if(i % j == 0){
        break;
      }else{
      System.out.println(i+" "+j+" ");
      }
    }
    /*if(i == j){
      System.out.print(i+" ");
    }*/
    }

  }
}

输出为:

101 2
101 3
101 4
101 5
101 6

...

199 195
199 196
199 197
199 198

H看到这个地方彻底傻了,这个证明了误区一的正确性,脑袋里是为什么、为什么。。。

当时就在想那么就让 j <= i 好了试一试

public class H_Z09 {

  public static void main(String[] args) {
    int i , j; 
    for( i = 101;i < 200 ; i++){
    for(j = 2 ;j <= i ; j++){
      if(i % j == 0){
        break;
      }else{
      System.out.println(i+" "+j+" ");
      }
    }
    /*if(i == j){
      System.out.print(i+" ");
    }*/
    }

  }
}

输出为:

101 2
101 3
101 4
101 5
101 6

...

199 195
199 196
199 197
199 198

依然是这样那好么,是我这个电脑有问题,换电脑试试,睡觉明天再说。但是H的贼心不死:

写下了这样的代码:

public class H_01 {

  public static void main(String[] args) {
    int j;
    for(j = 0 ; j < 100 ; j++){
      System.out.print(j+ " ");
    }
    System.out.println();
    System.out.print(j+ " ");

  }

}

输出:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
100

ok 基本功啊基本功成功的解释了三点:

1、j上面的代码中最后的值为199、在for循环内部执行最大的数为198而确实最后的j为199;

2、j == i 其实是为是j循环到i次都没有找到i的约数,j是次数,i是数值。

3、j < = i 这个也是成立的以为j 确实是个次数。达到了次数Z的代码就是有效的。

其实后来自己想用二维数组去解决这个问题!!

转载于:https://www.cnblogs.com/hhxz/p/9716815.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值