34

4正整数分解质因数

package com.test;

import java.util.Scanner;

import org.apache.poi.hssf.record.formula.functions.Int;

import antlr.debug.NewLineEvent;

public class test444 {

/**
* @param args
* 【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

注:每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 分解质因数只针对合数。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

/*
0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 4=2*2 5 6=2*3 7 8=2*2*2 9=3*3 10=2*5


*/
FenJieZhiYinShu(6);
/*
System.out.println("输入所求正整数:");
Scanner sc = new Scanner(System.in);
Long n = sc.nextLong();
long m=n;//m 才是要分解的合数;n只是中间用的一个数而已;
int flag = 0;
String[] str = new String[50];
for (long i = 2; i <= n; i++) {//2,3,4...轮回 去 求模 取余,为零,整除(234...)的时候,表示 算一个质因数;
if (n % i == 0) {
str[flag] = Long.toString(i);
flag++;//然后放在字符串数字里一次;这里表示质因数 数组里的 数 的数量,方便后面打印的;
n = n / i;//n第一次除完后,再用取完第一个质因数剩下的n去取质因数;
i--;//i就是质因数,为了不让她i++跳过去,就减了1;;;;直到i大于n,,,,,就是最后一个质因数? 我理解还有点问题= =,大家可以评论下...
}
}
if (flag < 2)
System.out.println(m + "为质数");
else {
System.out.print(m + "=" + str[0]);
for (int k = 1; k < flag; k++) {
System.out.print("*" + str[k]);
}
System.out.println("\n"+m+"共有"+flag+"个质因数.");
}
sc.close();
*/
}

public static void FenJieZhiYinShu(int x){
int a,b,c;
a=b=c=0;
a = x;
b = x;
String[] e = new String[50];
for(int i=2;i<=a;i++){
if(a%i==0){//我记得是表示整除的... ;如果能被整除,才去里面取质因数;
e[c]=String.valueOf(i);
c++;
a = a/i;
i--;
}
}
if(c<2)
System.out.println(x +"是质数");
else{
System.out.print(x + "=" + e[0]);

for(int k=1;k<c;k++){
System.out.println("*"+e[k]);
}
System.out.println("\n"+x+"共有"+c+"个质因数");
}

}

}

posted on 2017-07-04 16:52  小确幸~  阅读(260)  评论(0编辑  收藏  举报

导航