进阶其实就是在找这个数的公因数有多少个取,从中取三个数进行排列组合
public class Main {
public static void main(String args[]) {
//常规思路:让你写一个寻找因数的代码,如果数据小还好说但是数据如果特别大
//三个for循环计算机也算不过来
long num = 2021041820210418l;
for (long i = 1; i < num; i++) {
for (long j = 1; j < num; j++) {
for (long k = 1; k < num; k++) {
if (i * j * k == num) {
System.out.println(i);
System.out.println(j);
System.out.println(k);
}
}
}
}
}
}
进阶方法,将三个循环减少一个循环
public class Main{
public static void main (String []args){
int count = 0;
for (int i = 1; i < 10; i++){
for (int j = 1; j < 10;j++){
if(!isInt(i*j)){
count++;
}
}
}
System.out.print(count);
}
public static boolean isInt (int num){
int n = 10;
if (n % num == 0){
return false;
}
return true;
}
}//但是这种方法还是计算量太大了
下面提供一个跳跃思维希望可以给大家一些启发
package com.lh.create;
import java.util.ArrayList;
public class Main{
public static void main(String[] args) {
long num = 2021041820210418l; //初始一个大数据
ArrayList<Long>arr = new ArrayList<Long>();//定义一个long型的集合
//!!!这里只需要把数据便利到num的开平方数即可,至于为什么看for循环里面的语句就可以理解了
for (long i = 1; i <=Math.sqrt(num) ; i++) {
//初始量除以i能够整除就是num的因数
if (num % i == 0){
arr.add(i);
//!!!注意这里定义一个新的变量n就是将num除以因数i就可以得到另一个较大的因数
//这也是为什么只需要遍历到num的开平方数即可
long n = num / i;
if (n != i){
arr.add(n);
//只需要将i和n输出就可以得到所有num的因数了
System.out.println(i);
System.out.println(n);
}
}
}
System.out.println(arr.size());//这个就是统计num里面总共有多少个因数
}
}