zoukankan      html  css  js  c++  java
  • LightOJ 1024

    http://lightoj.com/volume_showproblem.php?problem=1024

    将每个数全部拆分,并且统计因子单个数中出现次数最高的,最后每个数字出现的次数相乘 大数相乘直接输出

    详细解答:http://www.cnblogs.com/zhengguiping--9876/p/5997481.html

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<map>
    #include<vector>
    #include<math.h>
    #include<string>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define LL long long
    #define N 10006
    #define Lson rood<<1
    #define Rson rood<<1|1
    int q[N],w[N],a[N],sum[N],k=0;
    void prime()
    {
        int w[N];
        for(int i=2;i<200;i++)
        {
            if(!w[i])
            {
                q[k++]=i;
                for(int j=i+i;j<200;j+=i)
                    w[j]=1;
            }
        }
    }
    void add(int x)
    {
        for(int i=0;i<1000;i++)
            a[i]=a[i]*x;
        for(int i=0;i<1000;i++)
        {
            a[i+1]+=a[i]/10000;
            a[i]=a[i]%10000;
        }
    }
    void Q()
    {
        int i=999;
        while(a[i]==0&&i>0) i--;
        printf("%d",a[i--]);
        while(i>=0) printf("%04d",a[i--]);
        printf("
    ");
    }
    int main()
    {
        prime();
        int T,n,t=1,d;
        scanf("%d",&T);
        while(T--)
        {
            memset(a,0,sizeof(a));
            memset(sum,0,sizeof(sum));
            scanf("%d",&n);
            for(int i=0;i<n;i++)
            {
                scanf("%d",&d);
                for(int j=0;j<k&&q[j]*q[j]<=d;j++)
                {
                    int ans=0;
                    while(d%q[j]==0)
                    {
                        ans++;
                        d=d/q[j];
                    }
                    sum[q[j]]=max(sum[q[j]],ans);
                }
                if(d>1) sum[d]=max(sum[d],1);
            }
            a[0]=1;
            for(int i=2;i<N;i++)
            {
                if(!sum[i]) continue;
                int x=1;
                for(int j=0;j<sum[i];j++)
                    x=x*i;
                add(x);
            }
            printf("Case %d: ",t++);
            Q();
        }
        return 0;
    }
  • 相关阅读:
    跟layout_weight说88,轻松搞定百分比布局
    跟闪退、程序崩溃说88
    程序的需求层次
    开博
    第十章 数组与集合 发牌程序 实例代码
    C#面向对象基础01
    winform form
    html
    C#语言基础02
    C#语言基础01
  • 原文地址:https://www.cnblogs.com/a719525932/p/7681881.html
Copyright © 2011-2022 走看看