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;
    }
    
    如果自己说什麽都做不到而什麽都不去做的话,那就更是什麽都做不到,什麽都不会改变,什麽都不会结束.
  • 相关阅读:
    [转]学习B站动态转发抽奖脚本
    【LeetCode】236. 二叉树的最近公共祖先
    Java中邮件的发送
    最长递增子序列(LIS)
    最长公共子序列(LCS)
    【LeetCode】69. x 的平方根
    Lombok的使用
    Centos 中文乱码解决方法
    FWT,FST入门
    [UOJ310][UNR #2]黎明前的巧克力
  • 原文地址:https://www.cnblogs.com/Sport-river/p/13785812.html
Copyright © 2011-2022 走看看