• 算法1


    1.例如求1000以内的素数:

    方法一:定义

    素数:除了1和它本身以外不再被其他的除数整数。

    [java] view plain copy
     
    1.     public void printPrime(){  
    2.         for(int i=2; i<1000; i++)  
    3.         {  
    4.             if(2==i || 3==i){  
    5.                 System.out.print(i+" ");  
    6.                 continue;  
    7.             }  
    8.             int j=2;  
    9.             while(j<i){  
    10.                 if(i%j==0){  
    11.                     break;  
    12.                 }  
    13.                 j++;  
    14.             }  
    15.             if(j==i){  
    16.                 System.out.print(i+" ");  
    17.             }  
    18.         }  
    19.     }  

    方法二:合数

    1 合数定义:指自然数中除了能被1和本身整除外,还能被其他数(0除外)整数的数

    2 大于1的自然数,不是质数就是合数。

    3 如果N是个合数,则一定存在大于1小于N的整数d1和d2,使得N=d1×d2,且 d1和d2中必有一个小于或等于√N

    思路:大于1的整数中排除合数,剩下的就是素数。

    [java] view plain copy
     
    1.  public void printPrime(){  
    2.         for(int i=2; i<1000; i++){  
    3.             boolean isPrime =true;  
    4.             for(int j=2; j<(int)Math.sqrt(i); j++){  
    5.                 if(i%j==0)  
    6.                     isPrime=false;  
    7.             }  
    8.             if(isPrime){  
    9.                 System.out.print(i+" ");  
    10.             }  
    11.         }  
    12.  }  

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

    public class Prime {

        public static int count = 0;

        public static void main(String[] args) {

            for (int i = 101; i < 200; i++) {
                boolean b = true;
                for (int j = 2; j <=  Math.sqrt(i); j++) {//---------------

                    if (i % j == 0) {
                        b = false;
                        break;
                    }
                }
                if (b) {
                    System.out.print(i+" ");
                    count++;
                }
            }
            System.out.println(" 素数的个数:" + count);
        }
    }

    发现 第二for循环不用 Math.sqrt(i) 总是有问题

    然后,发现了这个问题:为什么要用Math.sqrt(i)方法(返回正确舍入的 double 值的正平方根)?

     因为,只需要判断到这个值,
     例如:判断100,只需要判断到10就可以了,10*10
     100=n1*n2,那么n1或者n2一定有个<=10,所以只需要判断的10
    提高效率

    2.java交换两个变量的值

    以下方法的根本原理就是: 

    借助第三个变量

    c = a;
    a = b;
    b = c;

    运算符-不借助第三变量: 
    a = a+b; 
    b = a-b; 
    a = a-b; 
    为运算符-不借助第三个变量: 

    (此种方法运用这种原理:一个数对另一个数位异或两次,该数不变)
    a = a^b; 
    b = a^b; 
    a = a^b; 

    复制代码
    /**
     * Swap
     * 互换两个变量的值的方法
     * @author bc
     * @since 2018年3月27日
     */
    public class Swap {
        public static void main(String[] args) {
            int a = 3, b = 5;
            System.out.println("===临时变量===");
            temp(a, b);
            System.out.println("===算数运算===");
            arithmetic(a, b);
            System.out.println("===位运算====");
            bit(a, b);
        }
    
        // 借助第三个变量,使a,b变量的值交换
        public static void temp(int a, int b) {
            System.out.println("a=" + a + ";b=" + b);
    
            int c = a;
            a = b;
            b = c;
    
            System.out.println("a=" + a + ";b=" + b);
        }
    
        // 算数运算--(不借助第三个变量)
        public static void arithmetic(int a, int b) {
            System.out.println("a=" + a + ";b=" + b);
    
            a = a + b;//8
            b = a - b;//3
            a = a - b;//5
    
            System.out.println("a=" + a + ";b=" + b);
        }
    
        // 位运算--(不借助第三个变量)
        public static void bit(int a, int b) {
            System.out.println("a=" + a + ";b=" + b);
            
            //按位异或的运算规则--异:1
            /**
             *     a    :0011
             *     b    :0101
             * a^b  :0110
             */
            a = a ^ b; //0110
            /**
             *     a     :0110
             *     b     :0101
             *     a^b  :0011
             */
            b = a ^ b; //0011
            /**
             *     a     :0110
             *     b     :0011
             *     a^b  :0101
             */
            a = a ^ b; //0101
    
            System.out.println("a=" + a + ";b=" + b);
        }
    }
  • 相关阅读:
    综述:设计模式的分类及六大原则
    模板方法模式
    工厂模式三部曲之抽象工厂模式
    AI,DM,ML,PR的区别与联系
    delphi ADOCONNECTION异常拦截
    Delphi 10.2.3 精简版自动激活Embarcadero Delphi 10.2.3 v25.0.29899.2631 Lite v14.4
    Delphi使用TADOQuery的RowsAffected属性时需要注意的一个点
    delphi 新版内存表 FDMemTable
    delphi 中Adoquery ,在打开时能否让记录指针不移动? [问题点数:40分,结帖人microd]
    delphi循环校验数据集
  • 原文地址:https://www.cnblogs.com/jiayuchn-test/p/8918685.html
Copyright © 2020-2023  润新知