本帖最后由 hmwudizl91zl 于 2013-10-5 23:21 编辑
- package baiduzhidao.com;
- import java.util.ArrayList;
- import java.util.Arrays;
- public class baiduzhidao_1 {
- //有三种方法可解:1,穷举法(逻辑最简单)。2,分解质因数。3,短除法(最合理)。
- //本方法为短除法,就是先把1-20的数一直除以质数2,直到所有的数都不能整除2为止,再除以3……,依此类推,最后把除数相乘就行;
- private static ArrayList tagetIntegers=new ArrayList();//存放除数,它们的积就是所求的值;
- private static int[] primes=new int[]{2,3,5,7,11,13,17,19}; //存放的是1-20的质数,可以封装一个方法,1-?都可以,只要不溢出;
- private static int[] datas=new int[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};//存放数据源
- private static int flag_1=0;//标记,当值为0的时候表示当前质数数据源中的任何一个数都不能整除,反之为1。
- private static int j=0;//primes的下标。当他为7的时候,并且没有数可以短除它的时候 结束(也可以判断datas的所有元素都为1的时候结束,麻烦些);
- public static void main(String[] args) {
- int flag_time=0;//标记时间复杂度;
- while(true){
- flag_1=0;
- doit();
- if(j>=primes.length-1 && flag_1==0){
- break;
- }if(flag_1==0){
- j++;
- }
- dataPrint();
- flag_time++;
- }
- resultPrint();
- System.out.println(“时间复杂度为:”+flag_time*20);
- }
- //完成一次短除;
- public static void doit() {
- for(int i=0;i if(datas%primes[j]==0){
- datas=datas/primes[j];
- flag_1=1;
- }
- }
- if(flag_1==1){
- tagetIntegers.add(primes[j]);
- }
- }
- //打印现在的所有数据;
- public static void dataPrint(){
- System.out.println(“datas数据源:”+Arrays.toString(datas));
- System.out.println(“除数:”+tagetIntegers.toString());
- System.out.println(“标记:”+flag_1);
- System.out.println(“j的值:”+j);
- System.out.println();
- }
- public static void resultPrint(){
- int result=1;
- for (Integer i : tagetIntegers) {
- result*=i;
- }
- System.out.println(“最后的结果为:”+result);
- }
- }
复制代码 |