zoukankan      html  css  js  c++  java
  • 算法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);
        }
    }
  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/jiayuchn-test/p/8918685.html
Copyright © 2011-2022 走看看