后续会补充图解和思路。本人学生,水平有限,如有错误,恳请指出。更新中
1.数位分离
/**
* 将整数的各个位数上的数字分离处理
*/
public List resolveNum(int n) {
ArrayList list = new ArrayList();
while(n>0){
list.add(n%10);
n/=10;
}
Collections.reverse(list);
return list;
}
2.质数
2.1质数判断
2.1.1暴力求法
/**
* 判断是否为质数
*/
public boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
2.1.2筛法
1.将质数加入质数表
2.筛选的时候,将数乘与质数表里面的每一个数,从而筛去合数
3.关键点在于如果被最小的数筛到了就break
2.2分解质因数
从小到大分解因数即可,因为是从小到大,和筛法类似,一定是质因数先被除去。
当筛完到根号n区间是,最多还存一个大于根号n的数,(因为如果存在两个大于根号n的因数,那这两个数的乘积必然大于n了)故 if(n!=1)输出一下
/**
* 分解质因数
*/
public List resolve(int n){
ArrayList list = new ArrayList();
for(int i=2;i*i<=n;i++)
while(n%i==0&&n!=1){
list.add(i);
n/=i;
}
if(n!=1)list.add(n);
return list;
}
2.3最大公因数
g c d ( a , b ) = { a b = 0 g c d ( b , a % b ) b ≠ 0 gcd(a,b)=\begin{cases} a & b=0 \\ gcd(b,a \% b) & b\neq 0 \end{cases} gcd(a,b)={agcd(b,a%b)b=0b=0
/**
* 返回两数a,b的最大公因数
*/
public int gcd(int a, int b)
{
return b != 0 ? gcd(b, a % b) : a;
}
3.回文数
/**
* 判断是否为回文数
*/
public boolean isPali(String str) {
if(str.equals(new StringBuilder(str).reverse().toString()))
return true;
return false;
}
/**
* 判断是否为回文数
*/
public boolean isPali(String str) {
int i = str.length(), j = 0;
while (j <= (i / 2) - 1 && str.charAt(j) == str.charAt(i - j - 1)) {
j++;
}
if (j == i / 2){
return true;
}
return false;
}