Problem Description
Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1 * p2^k2 *…*pm^km.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range of long int.
Output Specification:
Factor N in the format N = p1^k1 * p2^k2 *…*pm^km, where pi’s are prime factors of N in increasing order, and the exponent ki is the number of pi – hence when there is only one pi, ki is 1 and must NOT be printed out.
Sample Input:
97532468
Sample Output:
97532468=2^2*11*17*101*1291
#include<iostream>
#include<math.h>
using namespace std;
#define MAX_N 100010
struct factor{
int x;
int cnt;
}fact[10];
bool is_prime(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;
}
int prime[MAX_N];
int pNum=0;
void prime_Table(){
for(int i=1;i<MAX_N;i++){
if(is_prime(i)){
prime[pNum++]=i;
}
}
}
int main(){
prime_Table();
int n;
int num=0;
cin>>n;
if(n==1)
cout<<"1=1";
else{
cout<<n<<"=";
int sqr=(int)sqrt(n);
for(int i=0;i<pNum&&prime[i]<=sqr;i++){
if(n%prime[i]==0){
fact[num].x=prime[i];
fact[num].cnt=0;
while(n%prime[i]==0){
fact[num].cnt++;
n/=prime[i];
}
num++;
}
if(n==1) break;
}
if(n!=1) {
fact[num].x=n;
fact[num++].cnt=1;
}
for(int i=0;i<num;i++){
if(i>0) cout<<"*";
cout<<fact[i].x;
if(fact[i].cnt>1){
cout<<"^"<<fact[i].cnt;
}
}
}
}
本文介绍了一种质因数分解算法的实现方法,通过给定一个正整数N,找到其所有质因数并以特定格式输出。该算法首先构建一个质数表,然后利用这些质数对输入的整数进行分解。
296

被折叠的 条评论
为什么被折叠?



