题目链接在此。
质因子分解简单练习。
质因子分解方法看这里。
AC代码
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct factor{
int x,cnt; //x为质因子,cnt为x的个数
}fac[10];
int index = 0; //记录fac数组的下标
int prime[10000], num = 0; //保存从2到n的素数 ,记录其下标
//判断n是不是素数
bool isPrime(int n){
if(n <= 1) return false;
int sqr = (int)sqrt(n);
for(int i = 2; i <= sqr; i++){
if(n%i == 0) return false;
}
return true;
}
//打印n以内的素数表
void printPrimeTable(int n){
for(int i = 2; i <= sqrt(n); i++){
if(isPrime(i)){
prime[num++] = i;
}
}
}
//求n的质因子并存到fac数组中
void findFactor(int n){
for(int i = 0; i < num; i++){
if(n%prime[i] == 0){
fac[index].x = prime[i];
fac[index].cnt = 0;
while(n%prime[i] == 0){
fac[index].cnt++;
n /= prime[i];
}
index++;
if(n == 1) break; //节省点时间
}
}
if(n != 1){
fac[index].x = n;
fac[index].cnt = 1;
index++;
}
}
int main(){
int n;
scanf("%d",&n);
//打印质数表
printPrimeTable(n);
//找质因子并打表
findFactor(n);
if(n == 1){ //对1进行特判
printf("1=1");
}else{
printf("%d=",n);
for(int i = 0; i < index; i++){
if(i == 0){
if(fac[i].cnt == 1){
printf("%d",fac[i].x);
}else{
printf("%d^%d",fac[i].x, fac[i].cnt);
}
}else{
if(fac[i].cnt == 1){
printf("*%d",fac[i].x);
}else{
printf("*%d^%d",fac[i].x, fac[i].cnt);
}
}
}
}
return 0;
}