蓝桥杯 1464: [蓝桥杯][基础练习VIP]分解质因数
基本思想:
典型的分解质因数问题的求解。没啥问题;
关键点:
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;
}
}

浙公网安备 33010602011771号