基本思想:
典型的分解质因数问题的求解。没啥问题;
关键点:
1.注意迭代问题,使用sqrt(n)可以减少一定的时间复杂度;
2.不用特意排序,枚举的时候自然排序;
#include<iostream> #include<stdlib.h> #include<stdio.h> #include<vector> #include<string> #include<math.h> #include<algorithm> #include<cstring> using namespace std; const int maxn = 1000000; struct node { int fac=-1; int cnt=0; }; bool primecharge[maxn]; void init() { //进行素数初始化; fill(primecharge, primecharge + maxn, true); primecharge[0] = primecharge[1] = false; for (int i = 2; i < maxn; i++) { if (primecharge[i]) { for (int j = i + i; j < maxn; j+=i) { primecharge[i] = false; } } } } void func(int n) { int temp = n; vector<node>factor; int sq = int(sqrt(n)); for (int i = 2; i <= sq; i++) { if (n%i == 0) { node f; f.fac = i; while (n%i == 0) { //i为因子; n = n / i; f.cnt++; } factor.push_back(f); } } if (n != 1) { node f; f.fac = n; f.cnt = 1; factor.push_back(f); } printf("%d=",temp); bool flag = true; for (int i = 0; i < factor.size(); i++) { for (int j = 0; j < factor[i].cnt; j++) { if (flag) { printf("%d", factor[i].fac); flag = false; } else { printf("*%d", factor[i].fac); } } } } int main(){ init(); int a, b; cin >> a >> b; for (int i = a; i <= b; i++) { func(i); cout << endl; } }