将一个正整数分解质因数,例如:输入90,打印输出90=2*3*3*5

解决方案 »

  1.   


    int num = 90;
    String result = "90=";
    int i = 2;
    while(num > 1){
    if(num % i == 0) {
    result += i + "*";
    num /= i;
    } else
    i ++;
    }
    System.out.println(result.substring(0, result.length()-1));
      

  2.   

    把三楼的while(num > 1)
    改成 while(num >= i) 更好
      

  3.   

    可以用递归实现:
    设num是需要求解的数值,按如下步骤;
    令 n = {2 <= n <=sqrt(num)},依次扫描是否能够被num整除[第一个能被整除的数一定是个质数]
        如果出现第一个能整除num的n,则n为第一个分解的质数,然后num等于num/n,递归调用即可;
        如果n都不能被num整除,说明num本身就是一个质数。
    package number;public final class NumberHandle {
    public static void decomposition(int num) {
    if (num <= 1) {
    System.out.println("The given number less or equals to 1");
    return;
    }
    StringBuffer sb = new StringBuffer();
    sb.append(num + " = ");
    split(num, sb);
    System.out.println(sb);
    }

    public static void split(int num, StringBuffer sb) {
    boolean isQulity = true;

    for (int i = 2; i <= Math.sqrt(num); i++) {
    if (num % i == 0) {
    sb.append(" " + i + " * ");
    split((int) num / i, sb);
    isQulity = false;
    break;

    }

    if (isQulity) {
    sb.append(num);
    }
    }

    public static void main(String[] args) {
    decomposition(1000);
    }
    }
      

  4.   


    import java.util.Scanner;public class Factors
    {
    public static void main(String[] args)
    {
    Scanner scan = new Scanner(System.in);
    int prod = scan.nextInt(); int i = 2; 
    while(true)
    {
    if(prod % i == 0)
    {
    prod /= i;
    System.out.print(i);
    if(prod != 1)
    {
    System.out.print("*");
    }
    else{
    break;
    }
    }
    else{
    i++;
    }
    }
    }
    }
      

  5.   


    import java.util.Scanner;public class  PrintPrimeNumber{
    private final static Scanner sc= new Scanner(System.in);
    public static int  getNum(String s){
    int num;
    while(true){
    try{
    System.out.println(s);
    num = sc.nextInt();
    break;
    }catch(Exception e){
    System.out.println("非法数据!");
    sc.next();
    }
    }
    return num;
    }
    public static void main(String[] args){
      int n=getNum("请输入一个整数:");
      for(int i=2;i<=n;i++)
    while(n!=i){
      if(n%i==0){
    System.out.printf("%d*",i);
    n=n/i;
      }
      else
    break;
    }
     System.out.printf( "%d",n);
    }
     } 
      

  6.   

    把getNum()改成private更好.............
      

  7.   

    #include   <math.h>   
      #include   <stdio.h>   
      #include   <stdlib.h>   
        
      int   main(   void   )   
      {   
              int   i,   j,   m,   max;   
              char   *su=(char*)malloc(100000000);   
              scanf("%d",   &max);   
              m   =sqrt(   max);   
              for(i=2;   i<=m;   i++)   
                      if(su[i]==0)   
                              for(j=i*i;   j<max;   j+=i)   
                                      su[j]   =   1;   
              free(su);   
              return   0;   
      }    在网上搜的,1亿以内只要3秒钟就可以生成。
        
      

  8.   


      public class zz{
    public static void main(String[] arg){
    int p=90;
    int i=2;
    int[] a=new int[10];
    System.out.print("p的因数:");
    while(i<90){
    if(p%i==0){
    p=p/i;
      System.out.print(i+" ");
      
      i=2;
        }else{
          i++;
        }
      
       } 
      System.out.print("\n");
         }
      }刚刚学习JAVA 我的程序要那边改进的
      

  9.   

    回贴当然是一种美德了,可惜小弟刚接触JAVA不久。。
      

  10.   

    我说下原理吧,就不贴代码了
    设定一个为90的数,然后再定义一个2,再定义一个字符串(temp)来存储质因数
    接着使用while循环来做
    用IF来判断,如果90除余2等于0,那么就执行90除以2,然后把这个结果存进一个临时的变量,把得出的质因数存进temp里。否则2+1;
    最后输出就行了!
      

  11.   


    package src;public class PrimeSub {
      public static void main(String[] args) {
    int num = 100;
            String result = "90=";
            int i = 2;
            while(num >=i){
                if(num % i == 0) {
                    result += i + "*";
                    num /= i;
                } else
                    i ++;
            }
            System.out.println(result.substring(0, result.length()-1));
    }}