问题描述
设计算法,用户输入合数,程序输出若个素数的乘积。例如,输入6,输出2*3。输入20,输出2*2*5。
样例
与上面的样例输入对应的输出。
例:
数据规模和约定
输入数据中每一个数在int表示范围内。
分析:1.先筛出50000以内的素数,用n依次对每个素数取余,获得自身的所有因子
2.最后,如果n==1,说明还剩下一个比50000大的素数因子~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <iostream> #include <vector> using namespace std; int main() { int n, p[50001] = {0}; cin >> n; vector<int> vp, ans; for (int i = 2; i <= 50000; i++) { if (p[i] == 0) { vp.push_back(i); for (int j = 1; j * i <= 50000; j++) { p[i * j] = -1; } } } for (int i = 0; i < vp.size(); i++) { int t = vp[i]; while (n % t == 0) { ans.push_back(t); n /= t; } } if (n != 1) ans.push_back(n); for (int i = 0; i < ans.size(); i++) { if (i != 0) cout << '*'; cout << ans[i]; } return 0; } |
❤ 点击这里 -> 订阅《PAT | 蓝桥 | LeetCode学习路径 & 刷题经验》by 柳婼