题目给出x的质数分解,求x-1的质数分解式。
该题对输入的处理比较麻烦。我采用一次性读一行的方法。
#include<stdio.h>
#include<string.h>
int prime[3000];
int e[3000];
int main()
{
char a[1000],b[5],c[5];
int u,v,x;
while(1)
{
gets(a);
sscanf(a,"%d",&u);
if(u==0)break;
x=1;
int len=0;
int l=strlen(a);
while(1)
{
sscanf(a+len,"%s%s",b,c);
sscanf(b,"%d",&u);
sscanf(c,"%d",&v);
while(v--)x*=u;
len+=strlen(b)+2+strlen(c);
if(len>l)break;
}
x--;
int tot=0;
for(u=2;x>1&&u*u<=x;u++)
{
if(x%u==0)
{
prime[tot]=u;
e[tot]=0;
do
{
e[tot]++;
x/=u;
}while(x%u==0);
tot++;
}
}
if(x>1){prime[tot]=x;e[tot++]=1;}
for(int i=tot-1;i>0;i--)
printf("%d %d ",prime[i],e[i]);
printf("%d %d\n",prime[0],e[0]);
}
return 0;
}