1059 Prime Factors (25 分)
Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p
1
k
1
×p
2
k
2
×⋯×p
m
k
m
.
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 = p
1
^k
1
*p
2
^k
2
*…*p
m
^k
m
, where p
i
's are prime factors of N in increasing order, and the exponent k
i
is the number of p
i
– hence when there is only one p
i
, k
i
is 1 and must NOT be printed out.
Sample Input:
97532468
Sample Output:
97532468=2^211171011291
#include<cstdio>
#include<cmath>
struct out{
long long p;
long long k;
} out[100];
long long prime[100010];//开多大???
long long num=0;
bool judge[100010];
void findprime(){
for(long long i=2;i<=100000;i++)//??
{
if(judge[i]==false)
{
prime[num++]=i;
for(long long j=i+i;j<=100000;j+=i)
{
judge[j]=true;
}
}
}
}
int t=0;
int o=0;
void defactor(long long n){
long long sqr=(long long )sqrt(n*1.0);
for(long long i=0;prime[i]<=sqr;i++)
{
o=0;
while(n%prime[i]==0)
{
out[t].p=prime[i];
out[t].k++;
n/=prime[i];
o=1;
}
if(o==1)
t++;
}
if(n!=1)
{
out[t].p=n;
out[t].k=1;
t++;
}
}
int main()
{
long long n;
scanf("%lld",&n);
findprime();
defactor(n);
if(n==1)
{
printf("1=1");
return 0;
}
printf("%lld=%lld",n,out[0].p);
if(out[0].k>1)
printf("^%lld",out[0].k);
for(long long i=1;i<t;i++)
{
printf("*%lld",out[i].p);
if(out[i].k>1)
printf("^%lld",out[i].k);
}
return 0;
}
INT 开10^5次方数组