18.4.09 模拟考 zhx P75

Posted whymhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了18.4.09 模拟考 zhx P75相关的知识,希望对你有一定的参考价值。

题目链接 https://files.cnblogs.com/files/lovewhy/P75.pdf

                                       P75
                              竞赛时间: ??????????:??-??:??

 


注意事项(请务必仔细阅读)

T1

【 问题描述】

从1 − N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数
最大可能是多少。
【输入格式】
第一行一个数字N。
【输出格式】
一行一个整数代表答案对100000007取模之后的答案。
【样例输入】
7
【样例输出】
144
【样例解释】
但是塔外面有东西。
【数据规模与约定】
对于20%的数据, 1 ≤ N ≤ 100。
对于50%的数据, 1 ≤ N ≤ 5000。
对于70%的数据, 1 ≤ N ≤ 10^5。
对于100%的数据, 1 ≤ N ≤ 5 × 10^6。

 

//数学题2333
//竟然考了数学题mmp
//果然翻车了
//T1一分也没有
//数论是个大坑,埋葬了我

//把n!分解质因数,记录质因子出现的个数
//如果某个质因子a出现了偶数次,假设是b次,那么它就可以由a^(b/2) * a^(b/2)得到,
//也就是说,只要这个质因子出现了偶数次,它就组成了一个完全平方数
//如果多个质因子出现了偶数次,同理,他们也可以都分成两半再乘起来得到 
//如果是奇数呢?
//那就丢一个,使其变成偶数次 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

const int mod=1e8+7;
const int N=5e6+5;

int n;
int tot[N];
int prime[N],cnt;
bool nprime[N];

inline int read()
{
    char c=getchar();int num=0;
    for(;!isdigit(c);c=getchar());
    for(;isdigit(c);c=getchar())
        num=num*10+c-\'0\';
    return num;
}

inline void init()
{
    long long tmp;
    for(int i=2;i<=n;++i)
    {
        if(!nprime[i])
            prime[++cnt]=i;
        for(int j=1;j<=cnt;++j)
        {
            tmp=1ll*prime[j]*i;
            if(tmp>n)
                break;
            nprime[tmp]=1;
            if(i%prime[j]==0)
                break;
        }
    }
}

long long ksm(long long a,long long k)
{
    long long Ans=1;
    while(k)
    {
        if(k&1)
            Ans=Ans*a,Ans%=mod;
        k>>=1;
        a*=a;
        a%=mod;
    }
    return Ans;
}

inline void work()
{
    for(int i=1;i<=cnt;++i)
    {
        int tmp=n;
        while(tmp)
        {
            tot[i]+=tmp/prime[i];
            tmp/=prime[i];
        }
    }
}

int main()
{
    n=read();
    init();
    work();
    long long ans=1;
    for(int i=1;i<=cnt;++i)
    {
        ans*=1ll*ksm(prime[i],tot[i]/2*2);
        ans%=mod;
    }
    printf("%lld",ans);
    return 0;
}

 

T2

【问题描述】

有N个数,随机选择一段区间,如果这段区间的所有数的平均值在[

以上是关于18.4.09 模拟考 zhx P75的主要内容,如果未能解决你的问题,请参考以下文章

代码:程序清单4.12_floatcnv.c程序_《C Primer Plus》P75

模拟题

简单的圆形下载进度条

[OI - 模拟考] LYOI2018模拟考N

编程两道——悼念2016.3.25模拟糟糕的模拟考

HDU - 5187 zhx's contest(快速幂+快速乘法)