BASIC-16 | 分解质因数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BASIC-16 | 分解质因数相关的知识,希望对你有一定的参考价值。
分解质因数
题目详情
解题分析
一)数据输入的是一个区间,必先建立一个循环,遍历区间里的每个整数,分别做质因数分解;
二)先判断整数是否为素数,若是,可直接打印;
(采用之前改进的判断素数的算法:算法改进 | java语言中判断素数)
三)求解一个合数整数n的质因数:
令k为最小的质数(即2);
Step1 若n正好等于k,质因素分解完成,打印出n;
Step2 若n>或<k,但n能被k整除,记下该k,并令n除以k的商作为新的n,重复Step1;
Step3 若n不能被k整除,令k+1为新的k,重复Step1;
代码如下
1 import java.util.Scanner; 2 import java.util.ArrayList; 3 4 public class Main { 5 6 public static void main(String[] args) { 7 // TODO 自动生成的方法存根 8 Scanner scan= new Scanner(System.in); 9 int a=scan.nextInt(); 10 int b=scan.nextInt(); 11 scan.close(); 12 13 for(int i=a;i<=b;i++){ 14 //判断整数i是否为素数,若是,直接打印并跳出循环 15 if(isPrime(i)){System.out.println(i+"="+i);continue;} 16 17 int k=2; 18 int n=i; 19 /* 20 * 建立动态数组 21 * 用于存储整数的质因数 22 */ 23 ArrayList<Integer> n_k= new ArrayList<Integer>(); 24 25 while(n!=k){ 26 if(n%k==0){ 27 n_k.add(k); 28 n=n/k; 29 } 30 else k=k+1; 31 } 32 System.out.print(i+"="); 33 for(int j=0;j<n_k.size();j++) 34 System.out.print(n_k.get(j)+"*"); 35 System.out.print(n+"\\n"); 36 37 } 38 39 } 40 static boolean isPrime(int num){ 41 int tmp=(int)Math.sqrt(num); 42 if(num==2||num==3)return true; 43 if(num%6!=1&&num%6!=5)return false; 44 for(int i=5;i<=tmp;i+=6) 45 if(num%i==0||num%(i+2)==0)return false; 46 return true; 47 } 48 49 }
测评
E N D
以上是关于BASIC-16 | 分解质因数的主要内容,如果未能解决你的问题,请参考以下文章