算法题
先学习几个概念:质数又称素数。指在一个大于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); } }
#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); }
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)); } }
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); }
#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; }
#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; }