用java语言编写一个数的最小因子

如题所述



import java.util.List;

public class StackOfIntegers {
//存放分解的素数
List<Integer> list = new ArrayList<Integer>();

//主方法,求分解素数
public void getSub(int sum){
//获取中间数的后一个数,保证中间数可以在下面的for中被循环
int middle = getMiddleAfter(sum);
//2是最小的素数,从2开始循环除
for(int i=2;i<middle;i++){
//如果i不为素数,直接跳过,循环下个数
if(!isSuShu(i)){
continue;
}
//余数
int yu = sum%i;
//商
int last = sum/i;
if(yu==0){
//余数为0,i为sum的因子,填入list
list.add(i);
//如果商为素数,则添加商到list,程序结束
if(isSuShu(last)){
list.add(last);
return;
}
//如果商不为素数,递归商调用本方法,分解商
getSub(sum/i);
//如果sum可以被素数因子整除,直接分解商,后续的因子不必再循环
break;
}
}
}

//如果可以被2整除,则+1,否则+1后再除以2
public int getMiddleAfter(int num){
if(num%2==0){
return num/2+1;
}else{
return (num+1)/2;
}
}

//判断是否是素数
public boolean isSuShu(int num){
boolean flag = true;
for(int i=2;i<num;i++){
if(num%i==0){
flag = false;
break;
}
}
return flag;
}
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
StackOfIntegers s = new StackOfIntegers();
s.getSub(120);
System.out.println(s.list);
}

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-09
用java语言编写一个数的最小因子
第2个回答  2014-12-09
最小因子是什么?麻烦说清楚点

编写一个程序,求一个数的所有因子
public void getSub(int sum){ \/\/获取中间数的后一个数,保证中间数可以在下面的for中被循环 int middle = getMiddleAfter(sum);\/\/2是最小的素数,从2开始循环除 for(int i=2;i<middle;i++){ \/\/如果i不为素数,直接跳过,循环下个数 if(!isSuShu(i)){ continue;} \/\/余数 int yu =...

Java编写输出一个整数的所有因子
import java.util.Scanner;public class A { public static void main(String[]args){ Scanner in = new Scanner(System.in);int a = in.nextInt();\/\/从控制台读入一个整数,也可以在这直接给a赋给初值 System.out.print(a+"的所有因子是:");for(int i = 1;i<=a;i++){ if(a%i=...

java:输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利 ...
辗除法——辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。代码:public class Test {public static final void main(String[] args) {System.out.println("请输入两个正整数");System.out.print("第一个正整数:");Scanner scanner = new Scanner(System...

求最小公分母和最大公因子的程序
m,n的最大公约数:4

JAVA 编程题求教
public static void main(String args[]) throws Exception { int b;while((b=System.in.read()) != -1){System.out.write(b);} } } 第二问:import javax.swing.JOptionPane;class List2 { public static void main(String[] a){ String str = JOptionPane.showInputDialog("Please enter...

java输入一个整数,输出其所有素数因子
import java.util.ArrayList;import java.util.List;import java.lang.Math;public class Solution {private int num;private List<Integer> primeList;private int index;public int getNum() {return num;}public void setNum(int num) {this.num = num;}public Solution(int num) {this.num = ...

JAVA编程题:找出1000以内的完数:一个数如果恰好等于它的因子之和,这个...
int sum = 0;\/\/因子总和 for (int j = 1; (j * j) <= i; j++) {\/\/j做除数,√n复杂度,减少一半的计算量 if (i % j == 0) {\/\/可以整除,为其因子 sum = j + (i \/ j) + sum;\/\/因子之和 } } if ((sum - i) == i) cout << "1000以内的完数:" << i <...

用java计算一个数的n的阶乘!n的末尾的0的个数
主要就是数因子为2,5的个数.最终0的个数取决于两者中的最小值.c实现代码如下:int c2=0,c5=0;for(i=2;i<n+1;i++) { int j=i;while(j>1){ if(j%5==0){ c5++;j\/=5;}else if(j%2==0){ c2++;j\/=2;}else break;} } return c2>c5?c5:c2;...

java 随机产生一个50,100之间的整数并判断是否为素数,谢谢了
int value = 0;do{ value = rand.nextInt(100+1);产生0~100之间数字 }while(value < 50);\/\/如果低于50,继续,直到产生的数字大于等于50 boolean isPrimeNumber = validatePrimeNum(value);if(isPrimeNumber){ System.out.println("随机数" + value + "是一个质数!");}else{ System.out....

如果一个数等于他的所有的因子之和,这个数就称为“完数”,请编程找出...
即1000以内的完数只有6、28、496三个数字。用Java编写代码如下(只需修改N即可):publicclassPrefectnumber{ publicstaticvoidmain(Stringarg[]){ intN,m,s;N=1000;inti;System.out.println("小于"+N+"的完数有");for(i=1;i<=N;i++){ s=0;for(m=1;m...

相似回答