【Java算法】各类数的求法

后续会补充图解和思路。本人学生,水平有限,如有错误,恳请指出。更新中

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值