zoukankan      html  css  js  c++  java
  • jzoj 5348. 【NOIP2017提高A组模拟9.5】心灵治愈

    Description

    Input

    Output

    Solution


    Explanation

    题目真把我看吐了,又臭又长的题面完全没有阅读的欲望好吧
    其实就是有(n+1)个数,已知第n+1个数是m,然后第1~n个数∈[1,m],求这些数互质的方案数
    正难则反
    容易得出总方案是(m^{n})
    我们再减去重复的就好了
    将m分解质因数,再用容斥减就好了

    Code

    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #define MO 1000000007
    #define ll long long
    #define open(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
    using namespace std;
    int tot,i,prime[30000];
    ll n,m,t,ans;
    ll ksm(ll x,ll y)
    {
        ll sum=1;x%=MO;
        while (y)
        {
            if (y&1) sum=(sum*x)%MO;
            x=(x*x)%MO;
            y>>=1;
        }
        return sum;
    }
    void dg(int x,ll y,int z)
    {
        if (x>tot)
        {
            ans=(ans+ksm(m/y,n)*(z%2==0?1:-1)+MO)%MO;
            return;
        }
        dg(x+1,y*prime[x],z+1);
        dg(x+1,y,z);
    }
    int main()
    {
        open("heal");
        scanf("%lld%lld",&n,&m);
        t=m;
        for (i=2;i<=floor(sqrt(m));i++)
        {
            if (t%i==0)
            {
                prime[++tot]=i;
                while (t%i==0) t/=i;
            }
        }
        if (t>1) prime[++tot]=t;
        dg(1,1,0);
        printf("%lld",ans);
        return 0;
    }
    
    如果自己说什麽都做不到而什麽都不去做的话,那就更是什麽都做不到,什麽都不会改变,什麽都不会结束.
  • 相关阅读:
    shell编程介绍
    第一章作业
    jenkins介绍与操作
    gitlab介绍与操作
    github介绍与操作
    git介绍与操作
    zabbix监控tomcat与安全规范
    js-20170605-基本语法
    webstorm激活方法
    mac的一些基本设置(分享篇)
  • 原文地址:https://www.cnblogs.com/Sport-river/p/13785812.html
Copyright © 2011-2022 走看看