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<cstdio>
#include<stack>
#include<algorithm>
#include<queue>
#define maxx 100050
using namespace std;
bool isP[maxx];
vector<int> prime;
void getPrime()
{
for(int i=2;i<maxx;i++)
{
if(!isP[i])
{
prime.push_back(i);
for(long long j=(long long)i*i;j<maxx;j+=i)
isP[j]=true;
}
}
}
int fac[100];
int e[100];
int k;
void getFac(int x)
{
k=0;
for(int i=0;(long long)prime[i]*prime[i]<=x;i++)
{
if(x%prime[i]==0)
{
fac[k]=prime[i];
while(x%prime[i]==0)
{
e[k]++;
x/=prime[i];
}
k++;
}
}
if(x>1)
{
fac[k]=x;
e[k++]=1;
}
}
int main()
{
getPrime();
//cout<<"haha";
int n;
scanf("%d",&n);
if(n==1)
{
cout<<1<<"="<<1;
return 0;
}
getFac(n);
printf("%d=%d",n,fac[0]);
if(e[0]>1)
printf("^%d",e[0]);
for(int i=1;i<k;i++)
{
cout<<"*"<<fac[i];
if(e[i]>1)
cout<<"^"<<e[i];
}
return 0;
}