zoukankan      html  css  js  c++  java
  • 完全平方数(钟神的hao)

    【问题描述】


    从1− ?中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数
    最大可能是多少。


    【输入格式】


    第一行一个数字?。


    【输出格式】


    一行一个整数代表答案对100000007取模之后的答案。


    【样例输入】


    7


    【样例输出】


    144


    【样例解释】


    但是塔外面有东西。


    【数据规模与约定】


    210。
    55000。
    70%的数据,1 ≤ ? ≤ 10 5 。
    对于100%的数据,1 ≤ ? ≤ 5× 10 6 。

    思路:

      打素数表+分解质因数=满分ac-->ak虐场-->noip一等-->noi金牌-->IOI金牌-->acm领奖台(别做梦了写代码吧)

        来,上代码:

    #include<cstdio>
    
    #define LL long long
    #define INF 100000007LL
    
    using namespace std;
    
    LL n,Num(0),Ans=1,Sum[350000]={0},Prime[350000];
    bool Flag[5000001]={0};
    
    LL Count(LL S,LL X)
    {
        LL Number=1;
        while (S)
        {
            if (S&1)
              Number=(Number*X)%INF;
            X=(X*X)%INF;
            S>>=1;
        }
        return Number;
    }
    
    void Euler()
    {
        for (LL a=2;a<=n;a++)
        {
            if (!Flag[a])
            Prime[Num++]=a;
            for (LL b=0;b<Num&&a*Prime[b]<=n;b++)
            {
                Flag[a*Prime[b]]=true;
                if (!(a%Prime[b]))
                  break;
            }
        }
    }
    
    int main()
    {
        scanf("%I64d",&n);
        Euler();
        for (LL a=0;a<Num;a++)
        {
            LL t=n;
            while (t)
            {
                Sum[a]+=t/Prime[a];
                t/=Prime[a];
            }
        }
        for (LL a=0;a<Num;a++)
        if (Sum[a]&1)
        Ans=(Ans*Count(Sum[a]-1,Prime[a]))%INF;
        else
        Ans=(Ans*Count(Sum[a],Prime[a]))%INF;
        printf("%I64d",Ans);
        return 0;
    }
  • 相关阅读:
    Convolution1D与Convolution2D区别
    git
    cast函数
    Ubuntu14.04编译WebRTC For Android代码 2014-07-24
    R语言基础-数组和列表
    疯狂的创业运动
    Autodesk 举办的 Revit 2015 二次开发速成( 1.5 天),教室培训, 地点武汉
    注冊(十一)重注冊带有鉴权信息
    ubuntu14.04无法安装Curl
    Bash脚本中的操作符
  • 原文地址:https://www.cnblogs.com/IUUUUUUUskyyy/p/6035707.html
Copyright © 2011-2022 走看看