首页 > 其他分享 >解题报告 洛谷P2155 [SDOI2008] 沙拉公主的困惑

解题报告 洛谷P2155 [SDOI2008] 沙拉公主的困惑

时间:2023-09-29 15:44:44浏览次数:42  
标签:P2155 le 洛谷 limits int dfrac 1e7 SDOI2008

P2155 [SDOI2008] 沙拉公主的困惑

题目
题面非常的简洁,求 \(\sum\limits_{i=1}^{n!}[i\perp m!]\)
直接颓式子,

\[\begin{aligned} ans&=\dfrac{n!}{m!}\cdot\varphi(m!)\\\\ &=\dfrac{n!}{m!}*m!\prod\limits_{p\mid m!}[\dfrac{p-1}{p}]\\ &=n!\cdot\dfrac{\prod\limits_{p\in\mathbb{P},p\le m}(p-1)}{\prod\limits_{p\in\mathbb{P},p\le m}p} \end{aligned} \]

p为1到m中的所有质数,逆元和阶乘预处理直接乘起来就行。
小粉兔提出模数可能会小于n,
当 \(mod\le m\le n\) 时,逆元遇到 \(p\mid i\) 时,\(inv_i=1\) ,然后阶乘时要判断,因为分子和分母可以消去 p 。
而当 \(m<mod\le n\) 时,即不能消去 p 时就直接输出0 。
感觉这道题有点毒瘤。
代码如下

#include<bits/stdc++.h>

#define int long long

using namespace std;

int prime[(int)(1e6)+5],

ny[(int)(1e7)+5],num[(int)(1e7)+5],

x,y,cj[(int)(1e6)+5];

int jie[(int)(1e7)+5];

bool vis[(int)(1e7)+5];

void getprime(int n){

    int m=0;

    for(int i=2;i<=n;i++){

        if(!vis[i])prime[++m]=i;num[i]=m;

        for(int j=1;j<=m&&prime[j]*i<=n;++j){

            vis[prime[j]*i]=1;

            if(i%prime[j]==0)break;

        }

    }

}

int read(){

    int x=0,f=1;char ch=getchar();

    for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;

    for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<1)+(x<<3)+(ch^48);

    return x*f;

}

void write(int x){

    if(x<0)putchar('-'),x=-x;

    if(x>9)write(x/10);

    putchar(x%10+48);

}

main(){

    int t,p,n,m;t=read();p=read();ny[0]=ny[1]=1;getprime((int)(1e7)+2);

    for(int i=2;i<=1e7;++i){ny[i]=(p-p/i)*ny[p%i]%p;}

    jie[1]=1;cj[0]=1;

    for(int i=2;i<=(int)(1e7)+1;++i)

        if(i==p)

            jie[i]=jie[i-1];

        else

            {jie[i]=i*jie[i-1]%p;}

    for(int i=1;i<=num[(int)1e7];++i){cj[i]=(prime[i]-1)*cj[i-1]%p*ny[prime[i]%p]%p;}

    while(t--){

        n=read(),m=read();

        if(n>=p&&m<p)

        {

            puts("0");

            continue;

        }

        n=jie[n];int pre=num[m];

        write(n*cj[pre]%p);

        putchar('\n');

    }

    return 0;

}

/*

1 3

4 3

*/

另外可以优化,只处理 \(max(n)\) 即可。最优解就是这么卡的。

标签:P2155,le,洛谷,limits,int,dfrac,1e7,SDOI2008
From: https://www.cnblogs.com/Ishar-zdl/p/17737035.html

相关文章

  • 洛谷 P7075[CSP-S2020] 儒略日
    [CSP-S2020]儒略日题目描述为了简便计算,天文学家们使用儒略日(Julianday)来表达时间。所谓儒略日,其定义为从公元前4713年1月1日正午12点到此后某一时刻间所经过的天数,不满一天者用小数表达。若利用这一天文学历法,则每一个时刻都将被均匀的映射到数轴上,从而得以很方便的......
  • 洛谷 P7075 [CSP-S2020] 儒略日
    P7075[CSP-S2020]儒略日1.题目描述为了简便计算,天文学家们使用儒略日(Julianday)来表达时间。所谓儒略日,其定义为从公元前4713年1月1日正午12点到此后某一时刻间所经过的天数,不满一天者用小数表达。若利用这一天文学历法,则每一个时刻都将被均匀的映射到数轴上,从而得以......
  • 洛谷5249
    先给出一个我自己的不那么套路的做法设p[i][j]表示一共有i个人,第j个人最终幸存的概率那么有\(p[i][j]=\)\[p_{0}*p[i-1][j-1]+(1-p_{0})*p_{0}*p[i-1][j-2]+...+(1-p_{0})^{j-2}*p_{0}*p[i-1][1](即前面j-1个人是否死进行讨论)\]\[+\]\[\]......
  • 洛谷3750 分手是祝愿
    这种可能会有无穷的情况,就是对某一个开关一直按像这种题目我把他叫做无穷型嵌套期望这种题目一般都是用DP推出公式然后化简看着题首先,我们考虑假设最开始最少的操作少于k,应该怎么做很容易发现一个性质,就是按动一个开关,只能影响前面的开关,不能影响后面的开关这是什么?无后效性......
  • Solution of 洛谷-P1896
    并不会有更好的阅读体验\(\text{Sol}\)我们先看一眼数据范围:\(1\leN\le9\)没关系,DFS会出手。好吧,正经的说,如果暴搜的话复杂度会涨到\(\textO(2^{n^2})\),\(\textT\)到飞起。此时我们发现有个东西叫状压\(\text{DP}\),也是解决小范围数据的问题。老套路,枚举每一行,......
  • [洛谷]-5825排列计数-欧拉数、NTT
    目录边界对称性递推形式容斥https://www.luogu.com.cn/problem/P5825题意:我们记一个排列P的升高为\(k\)当且仅当存在\(k\)个位置\(i\)使得\(P_i<P_{i+1}\)。给定排列长度\(n\),对于所有整数\(k\in[0,n]\),求有多少个排列的升高为\(k\),\(1\leqn\leq2\times10^5\)......
  • 对期望线性性的理解以及例题:洛谷P3239
    \(E(X+Y)\)中\(X+Y\)到底什么意思?我们不妨设\(X\)对应事件1,他有一个样本空间\(\Omega_{1}\),这个样本空间中的每一个事件对应一个取值同理我们对\(Y\)也搞一个\(\Omega_{2}\)。那么\(X+Y\)指的就是\(X\)和\(Y\)的笛卡尔积两个集合的笛卡尔积指的是从这两个集合分别各取一个元素......
  • 洛谷P6583 回首过去
    涉及知识点:容斥原理、数论分块前言本题对于数论分块类型题目推式子和处理方法有很大的启发题面Link给定正整数\(n\),求有序实数对\((x,y)\)满足\(1\leqx,y\leqn\)并且使得\(\frac{x}{y}\)为有限小数(本题题意下整数可视作小数点后有\(0\)位的有限小数)。分析首先......
  • 洛谷P3612 [USACO17JAN] Secret Cow Code S
    [USACO17JAN]SecretCowCodeS题面翻译奶牛正在试验秘密代码,并设计了一种方法来创建一个无限长的字符串作为其代码的一部分使用。给定一个字符串,让后面的字符旋转一次(每一次正确的旋转,最后一个字符都会成为新的第一个字符)。也就是说,给定一个初始字符串,之后的每一步都会增加当......
  • 洛谷P2341 [USACO03FALL] 受欢迎的牛 G
    P2341受欢迎的牛G题解这题我们需要了解强连通分量一、定义在有向图\(G\)中,如果两个顶点\(u\),\(v\)间有一条从\(u\)到\(v\)的有向路径,同时还有一条从\(v\)到\(u\)的有向路径,则称两个顶点强连通。如果有向图\(G\)的每两个顶点都强连通,称\(G\)是一个强连通......