ArcTan

dfs
随笔 - 16, 文章 - 117, 评论 - 6, 引用 - 0
数据加载中……

因数分解-模板-poj1365

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;
}
 

posted on 2012-05-04 16:04 wangs 阅读(226) 评论(0)  编辑 收藏 引用 所属分类: ACM-数学


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理