首页 > 试题广场 >

算法题 先学习几个概念:质数又称素数。指在一个大于1的

[问答题]

算法题

先学习几个概念:质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。把一个合数分解成若干个质因数的乘积的形式,叫做分解质因数。比如 12 可以分解成 2*2*3

请写一段程序,能够把从键盘输入的任意一个合数分解成质因数的乘积

import java.util.ArrayList;
import java.util.List;

public class code1 {
    public static void main(String[] args) {
        serch(20);
    }
    public static void serch(int n){
        List<Integer> list = new ArrayList<>();
        double sqrt = Math.sqrt(n);
        int i = 2;
        while (n >= 2) {
            if (n % i == 0) {
                list.add(i);
                n /= i;
                i = 2;
            }else {
                i++;
            }
        }
        int s = 1;
        for (Integer l : list){
            System.out.println(l);
            s *= l;
        }
        System.out.println(s);

    }
}

发表于 2019-09-12 11:20:27 回复(2)
#include <stdio.h>

void prim(int &n)
{
	int i = 0;
	for (i = 2; i <= n; i++)
	{
		while (n != i)
		{
			if (n%i == 0)
			{
				printf("%d*", i);
				n /= i;
			}
			else
			{
				break;
			}
		}
	}
}
int main(int argc, char* argv[]) {

	int n = 9;

	printf("%d=", n);
	prim(n);
	printf("%d", n);
	

}

发表于 2021-09-08 12:24:59 回复(0)
public class test4 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = Integer.parseInt(scanner.nextLine()); prim(a); } private static void prim(int a) { List<integer> list=new ArrayList<>();//存放质因数的集合 int i=2;//除1以外的最小质数 while(a>i){ if (a%i==0){ list.add(i); a/=i; } else{ i++; if (a==i){ list.add(i); } } } if (list.get(list.size()-1)==2){ list.add(2); } for (Integer integer : list) { System.out.print(integer); } } }</integer>
发表于 2021-02-21 16:43:35 回复(0)
public Class Test{
    public static String splitNum(int num){
        StringBuilder sbd = new StringBuilder();
        boolean flag = false;//拆分标志,false表示为不可拆分
        for (int i = 2 ; i <= 10; i++){
            while (num % i == 0){
                num /= i ;
                flag = true;
                sbd.append(i).append("*");
            }
        }
        if (!flag){
            //不可拆分,返回num*1;
            return sbd.append(num).append("*").append(1).toString();
        }
        sbd.append(1);
        return sbd.toString();
    }
    public static void main(String[] args){
        System.out.println(splitNum(12));
        System.out.println(splitNum(17));
        System.out.println(splitNum(35));
    }
}

发表于 2020-10-07 16:45:53 回复(2)
public static String method(int num){
        if(num < 2) return num + "";
        if(num == 2) return "1*2";
        StringBuilder sb = new StringBuilder();
        int index = 2 , temp = num;
        while (true){
            if(num==1 || index > temp - 1) break;
            if(num%index ==0){
                num /= index;
                sb.append(index);
                sb.append("*");
            }else {
                index++;
            }
        }
        return sb.toString().substring(0,sb.length() - 1);
    }

发表于 2020-09-13 23:01:50 回复(0)
#include<iostream>
#include<vector>
using namespace std;
int main()
{
	int n;
	vector<int> arry;
	cin >> n;
	for (int i = 1; i < n; i++)
	{
		if (n%i == 0)
		{
			arry.push_back(i);
			n = n / i;
			i = 1;
		}
	}
	arry.push_back(n);
	int length = arry.size();
	for (int i = 1; i < length - 1; i++)
		cout << arry[i] << "*";
	cout << arry[length - 1];
	return 0;
}


发表于 2019-09-21 20:57:12 回复(1)
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
bool fenjie(int& n) {
	for (int i = 2; i <= n; i++) {
		if (n % i == 0) {
			n = n / i;
			break;
		}
	}
	return true;
}

int main() {
	int n;
	cin >> n;
	int t = n,m=n;
	vector<int>d;
	while (t!= 1)
	{
		fenjie(t);
		d.push_back(n / t);
		n = t;
	}
	cout << m << "=";
	for (int i = 0; i < d.size(); i++) {
		if (i == 0) {
			cout << d[i];
		}
		else {
			cout << "*" << d[i];
		}
		
	}
	getchar();
	return 0;
}

发表于 2019-09-16 00:30:33 回复(0)