算法笔记Java

 Floyd

for(int k =1;k<=n;k++){
    for(int i = 1;i <=n;i++){
        for(int j =1;j<=n;j++){
            dp[i][j] = Math.min(dp[i][j],dp[i][k]+dp[k][j]);
         }
    }
}

埃氏筛法 

    static void getPrimes(int n){
		Arrays.fill(bprime,false);//先都置为false
		bprime[0] = true;
		bprime[1] = true;
		for(int i=2;i<=n;i++){
			if(bprime[i] == false){
				primes[res++] = i;
				for(int j= i*2;j<n;j+=i){
					bprime[j] = true;
				}
			}
		}
        for(int i=2;i<=n;i++)
            if(!bprime[i])
            System.out.println(i)
	}

快速幂

    private static long FastPower(long a,long b) {//a是被除数,b是除数
		long ans = 1;
		while(b >0){
			if((b & 1) == 1){
				ans = ans * a;
			}
			a = a*a;
			b >>=1;
		}
		return ans;
	}

 

约数个数定理,正约数个数,分解质因数

 一个数的质因数的平方必然小于这个数,如果分解质因数时质数平方已经大于这个数,那么这个数如果不是1就是他质因数中最后一个质数。

 8e395c211a2c4be48de9e81131d13404.png

    private static long check(long num) {
		long temp = num;
		long res = 0;
		for(int i =2;i<=Math.sqrt(num);i++){
			if(temp % i ==0) res ++;
			while(temp % i == 0){
				temp /=i;
			}
		}
		if(temp>1) res ++;
		return res;
		
	}

 

大数BigInteger

import java.math.BigInteger;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a =sc.nextInt();
        BigInteger x;
        BigInteger y;
        BigInteger res = BigInteger.ONE;
        for(int i =1;i<=a;i++){
          x = BigInteger.valueOf(i);
          y = res.gcd(x);// lcm 和 x 的 gcd
          res = res.divide(y).multiply(x);
        }
        System.out.println(res);
    }
}

 

 判断回文数

 

return Integer.toString(num).equals(new StringBuffer(Integer.toString(num)).reverse().toString());

 

并查集

    static int find(int x){//
		if(x == f[x]){
			return x;
		}else{
			f[x] = find(f[x]);
			return f[x];
		}
	}

 

 

posted @ 2023-11-27 14:22  limyu  阅读(14)  评论(0)    收藏  举报  来源