http://poj.org/problem?id=1365
傻×,这个题看了很久都没有看懂是什么意思。英语不行呀,到底应该怎么办呢?
题意,就是给一些a1 b1,a2 b2,……,ak bk
n=a1^b1*a2^b2*……*ak^bk.
然后需要对n-1因数分解。
赤裸裸的整数因子分解,数据也弱爆了!
不过数据读入还是个问题,字符读入的换行符ascii是10!
sscanf()和scanf()不同的呀。
#include<stdio.h>
#include<string.h>
#include<math.h>
int pri[5500];
int p[100005],tot;
int GetPrime()
{
int i,j;
memset(p,0,sizeof(p));
tot=0;i=2;
while (i<=50000)
{
while (p[i]) i++;
pri[++tot]=i;
j=i;
while (j<=50000)
{
p[j]=1;
j+=i;
}
}
tot--;
return 0;
}
int Pow(int a,int b)
{
int n;
n=1;
while (b)
{
if (b%2==1)
n=n*a;
a=a*a;
b=b/2;
}
return n;
}
int Solve(int n)
{
int i,j;
i=tot;
while (n>1&&i>=1)
{
j=0;
while (n%pri[i]==0)
{
j++;
n/=pri[i];
}
if (j>0)
printf("%d %d ",pri[i],j);
i--;
}
if (n>1)
printf("%d %d",n,1);
printf("\n");
}
int main()
{
int n,a,b;
char ch;
GetPrime();
while (scanf("%d",&a)==1&&a>0)
{
scanf("%d",&b);
n=Pow(a,b);
while (scanf("%c",&ch)==1&&ch!=10)
{
scanf("%d %d",&a,&b);
n=n*Pow(a,b);
}
Solve(n-1);
}
return 0;
}