zoukankan      html  css  js  c++  java
  • 一本通1628X-factor Chain

    1628:X-factor Chain

    时间限制: 1000 ms         内存限制: 524288 KB

    【题目描述】

    原题来自 POJ 3421

    输入正整数 x,求 x 的大于 1 的因子组成的满足任意前一项都能整除后一项的序列的最大长度,以及满足最大长度的序列的个数。

    【输入】

    多组数据,每组数据一行,包含一个正整数 x

    【输出】

    对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。

    【输入样例】

    2
    3
    4
    10
    100

    【输出样例】

    1 1
    1 1
    2 1
    2 2
    4 6

    【提示】

    数据范围与提示:

    对于全部数据,1x220

    sol:看上去难系列

    稍微想一下,发现是个排列组合一样的东西,又因为因数最多20,20!都没爆long long,随便搞搞

    对于第 i 个质因数 有G[i] 个,一共有cnt个质因数

                        cnt

    序列的最大长度Len就是     ∑ G[i]

                        i=1

                cnt

    方案数就是Len!  /   ∏  G[i]!

                i=1

    代码实现复杂度接近于0。。。。

    Ps:吐槽这里的sigma好难用啊qaq

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    inline ll read()
    {
        ll s=0;
        bool f=0;
        char ch=' ';
        while(!isdigit(ch))
        {
            f|=(ch=='-'); ch=getchar();
        }
        while(isdigit(ch))
        {
            s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
        }
        return (f)?(-s):(s);
    }
    #define R(x) x=read()
    inline void write(ll x)
    {
        if(x<0)
        {
            putchar('-'); x=-x;
        }
        if(x<10)
        {
            putchar(x+'0'); return;
        }
        write(x/10);
        putchar((x%10)+'0');
        return;
    }
    #define W(x) write(x),putchar(' ')
    #define Wl(x) write(x),putchar('
    ')
    const int N=1005;
    ll n;
    ll Ges[N];
    int main()
    {
        while(~scanf("%lld",&n))
        {
            ll i,nn=n,ans1=0,ans2=1;
            *Ges=0;
            for(i=2;i<=sqrt(nn);i++) if(nn%i==0)
            {
                ll tmp=1;
                Ges[++*Ges]=0;
                while(nn%i==0)
                {
                    nn/=i;
                    tmp*=(++Ges[*Ges]);
                    ans2*=(++ans1);
                }
                ans2/=tmp;
            }
            if(nn>1)
            {
                Ges[++*Ges]=1; ans1++; ans2*=ans1;
            }
            W(ans1); Wl(ans2);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    STM32的DMA
    stm32f1的IO,推挽与开漏
    STM32_GPIO配置及库函数讲解——独立按键
    STM32-外部中断学习笔记
    关于STM32的NVIC问题
    梯度下降<1>
    QString toInt()函数慎用
    linux→查看当前系统时间和修改系统当前时间
    oracle函数→数值型函数
    oracle函数→字符型函数
  • 原文地址:https://www.cnblogs.com/gaojunonly1/p/10434155.html
Copyright © 2011-2022 走看看