//poj 1365
//sep9
#include <iostream>
#include <stack>
using namespace std;
const int MAXN=32767;
int tot,vis[MAXN+10],prime[MAXN+10];
char s[128];
void solve(int sum)
{
--sum;
stack<pair<int,int> > sta;
for(int j=0;j<tot;++j)
if(sum%prime[j]==0){
int t=0;
while(sum%prime[j]==0){
++t;
sum/=prime[j];
}
if(t>0)
sta.push(make_pair(prime[j],t));
}
if(sum!=1)
sta.push(make_pair(sum,1));
while(!sta.empty()){
printf("%d %d ",sta.top().first,sta.top().second);
sta.pop();
}
printf("\n");
}
int main()
{
memset(vis,0,sizeof(vis));
tot=0;
for(int i=2;i<=MAXN;++i){
if(vis[i]==0)
prime[tot++]=i;
for(int j=0;j<tot&&prime[j]*i<=MAXN;++j)
vis[prime[j]*i]=1;
}
while(1){
gets(s);
int ok=1,sum=1;
for(int i=0;i<strlen(s);){
int a=0,b=0;
while(!(s[i]<='9'&&s[i]>='0'))
++i;
while(s[i]<='9'&&s[i]>='0')
a=a*10+s[i]-'0',++i;
if(a==0){
ok=0;
break;
}
while(!(s[i]<='9'&&s[i]>='0'))
++i;
while(s[i]<='9'&&s[i]>='0')
b=b*10+s[i]-'0',++i;
int t=1;
while(b--) t*=a;
sum*=t;
}
if(ok==0)
break;
else
solve(sum);
}
return 0;
}
poj 1365 Prime Land 素因数分解
最新推荐文章于 2017-08-01 20:58:00 发布