#include <cstdio>
#include <math.h>
const int maxn = 100010;
bool is_prime(int n) { //判断是否为素数
if (n == 1) return false; //1不是素数
int sqr = (int)sqrt(1.0*n);
for (int i = 2; i <= sqr; i++) {
if (n%i == 0) return false;
}
return true;
}
int prime[maxn], pNum = 0;
void Find_prime() { //求素数表
for (int i = 1; i < maxn; i++) {
if (is_prime(i) == true) {
prime[pNum++] = i;
}
}
}
struct factor {
int x, cnt; //x为质因子,cnt为其个数
}fac[10];
int main(){
Find_prime();
int n, num = 0; //num为n的不同质因子的个数
scanf("%d", &n);
if (n == 1) printf("1=1");
else {
printf("%d=", n);
int sqr = (int)sqrt(1.0*n);
//枚举根号n以内的质因子
for (int i = 0; i < pNum&&prime[i] <= sqr; i++) {
if (n%prime[i] == 0) {
//如果是质因子
fac[num].x = prime[i];
fac[num].cnt = 0;
while (n%prime[i] == 0) { //求质因子的个数
fac[num].cnt++;
n /= prime[i];
}
num++; //不同质因子个数加1
}
if (n == 1) break;
}
if (n != 1) {
fac[num].x = n; //一定有一个大于根号n的质因子
fac[num].cnt = 1; //其个数为1
}
//按格式输出结果
for (int i = 0; i < num; i++) {
if (i > 0) printf("*");
printf("%d", fac[i].x);
if (fac[i].cnt > 1) {
printf("^%d", fac[i].cnt);
}
}
}
return 0;
}
给出一个int范围的整数,按照从小到大的顺序输出其分解质因数的乘法算式
最新推荐文章于 2023-11-18 13:04:30 发布