算法笔记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就是他质因数中最后一个质数。

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];
}
}

浙公网安备 33010602011771号