【PAT甲级】1059 Prime Factors (25 分)

题意:

输入一个正整数N(范围为long int),输出它等于哪些质数的乘积。

trick:

如果N为1,直接输出1即可,数据点3存在这样的数据。

如果N本身是一个质数,直接输出它等于自己即可,数据点4存在这样的数据。

代码:

#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int ans[100007];
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
long long n;
cin>>n;
long long x=n;
int num=0;
for(int i=2;1ll*i*i<=n;++i){
if(x==1)
break;
while(x%(1ll*i)==0){
x/=1ll*i;
++ans[i];
++num;
if(x==1)
break;
}
}
if(num==0){
cout<<n<<"="<<n;
return 0;
}
cout<<n<<"=";
int flag=0;
for(int i=2;i*i<=n;++i){
if(ans[i]){
if(flag)
cout<<"*";
cout<<i;
if(ans[i]>1)
cout<<"^"<<ans[i];
flag=1;
}
}
return 0;
}

猜你喜欢

转载自www.cnblogs.com/ldudxy/p/11681506.html