首页 > 其他分享 >P2155 [SDOI2008] 沙拉公主的困惑

P2155 [SDOI2008] 沙拉公主的困惑

时间:2024-03-26 12:23:52浏览次数:13  
标签:P2155 沙拉 gcd int long times vis maxn SDOI2008

关于题目

题目描述

大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为 1 到 N 的阶乘,但是,政府只发行编号与 M! 互质的钞票。房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量。现在,请你帮助沙拉公主解决这个问题,由于数量可能非常大,你只需计算出答案对 R 取模后的结果即可。

输入格式

第一行为两个整数 T 和 R,其中 T 为该组中测试数据数目,R 为模数。
接下来 T 行,每行一对整数 N 和 M,具体意义见题目描述。

输出格式

共 T 行,对于每一对 N 和 M,输出\([1,N!]\) 中与 M! 互质的数的数量对 R 取模后的值。

输入输出样例

1 11
4 2

1

一个特殊样例

1 3
4 3

2

题解

题目信息

\(M\le N\) 所以 \(M!\,|\, N!\)。

公式推导

设\(s=\gcd(a,b),x\times s=a,y\times s=b\),且\(\gcd(x,y)=1\),所以

\[\begin{array}{lcr} \gcd(a+b\times k,b) &=& \gcd(x\times s+y\times s\times k,y\times s)\\ &=& \gcd(s\times(x+y\times k),y\times s)\;\;\; \\ &=& s\times\gcd(x+y\times k,y)\;\;\quad \quad\;\;\; \end{array} \]

设\(m | (x+y\times k)\),且\(m | y\),所以\(m|(y\times k)\),即\(m|x,m|y\),又因为\(\gcd(x,y)=1\),所以就有\(\gcd(x+y\times k,y)=m=1\),所以\(\gcd(a+b\times k)=s\times \gcd(x+y\times k,y)=s=\gcd(a,b)\)。
令\(b=M!\),所以就有任意\(k\in[1,N!/M!]\),即任意\(x\in[1,M!]\)时,有\(\gcd(k\times M!+x,M!)=\gcd(x,M!)\)。
也就是说任意\(k\in[1,N!/M!]\),\([(k-1)\times M!+1,k\times M!]\)中与\(M!\)中互质的数相等。
所以答案就是\(ans=N!/M!\times\Phi(M!)\)。
所以只需要去预处理出全部的逆元和阶乘,在进行O1的查询即可。

代码时刻

#include<bits/stdc++.h>
using namespace std;

const int maxn=10000000+10;

int t,r,n,m;
int phi[maxn],pri[maxn],fct[maxn];
bool vis[maxn];

inline long long qpow(int x,int y)
{
    long long res=1;
    while(y) 
    {
        if(y&1)res=1ll*res*x%r;
        x=1ll*x*x%r;
        y>>=1;
    }
    return res;
}

inline void prepare1()
{
    int cnt=0;
    vis[0]=vis[1]=1;
    for(int i=2;i<maxn;i++)
    {
        if(!vis[i])pri[++cnt]=i;
        for(int j=1;j<=cnt;j++)
        {
            if(1ll*i*pri[j]>=maxn)break;
            vis[i*pri[j]]=1;
            if(!i%pri[j])break;
        }
    }
}

inline void prepare2()
{
    fct[0]=phi[0]=1;
    for(int i=1;i<maxn;i++)
    {
        int x=i,cnt=0,y=i-1+vis[i],cut=0;
        while(x%r==0)
        {
            x/=r;
            cnt++;    
        }    
        fct[i]=1ll*fct[i-1]*x%r;
        while(y%r==0)
        {
            y/=r;
            cut++;
        }
        phi[i]=1ll*phi[i-1]*y%r;
    }    
}

void print(long long x){
    
	if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9)
    {
        print(x/10);
    }
    putchar(x%10+'0');
}

int main()
{
    ios::sync_with_stdio(false);
    prepare1();
    cin >>t>>r;
    prepare2();
    while(t--)
    {
        cin >>n>>m;
        if(n/r>m/r)
        {
            cout <<"0"<<endl;
            continue;
        }
        long long ans=1ll*fct[n]*phi[m]%r*qpow(fct[m],r-2)%r;
        print(ans);
        puts("");
    }
    
    return 0;
}

标签:P2155,沙拉,gcd,int,long,times,vis,maxn,SDOI2008
From: https://www.cnblogs.com/wang-qa/p/18096384

相关文章

  • 沙拉公主的困惑
    本来一开始觉得用欧拉函数不可取的,因为\(M!\)太大了所以我想到了质因数分解,只要找的数不含\(M!\)的质因子即可理想是美好的,但是现实是我没有办法确定每一个非\(M!\)质因子的质因子的个数,因为我最后要保证所有质因子的乘积不会超过\(N!\)所以我们只能再回到欧拉函数我们稍微的......
  • 解题报告 洛谷P2155 [SDOI2008] 沙拉公主的困惑
    P2155[SDOI2008]沙拉公主的困惑题目题面非常的简洁,求\(\sum\limits_{i=1}^{n!}[i\perpm!]\)直接颓式子,\[\begin{aligned}ans&=\dfrac{n!}{m!}\cdot\varphi(m!)\\\\&=\dfrac{n!}{m!}*m!\prod\limits_{p\midm!}[\dfrac{p-1}{p}]\\&=n!\cdot\dfrac{\......
  • WebDAV之π-Disk派盘 + 沙拉查词
    沙拉查词是支持多重查词模式混合使用,无论是单击、双击、图标、悬浮还是快捷键,总有适合您的搭配,整合了有道翻译、百度翻译、必应翻译、腾讯翻译君、Google翻译和彩云小译等,自动发音,可配置词典。π-Disk派盘®–知识管理专家派盘是一款面向个人和企业的本地云存储解决方案,它可以......
  • [SDOI2008] 递归数列
    题面一个由自然数组成的数列按下式定义:对于\(i\lek\):\(a_{i}=b_{i}\)。对于\(i>k\):\(\displaystylea_{i}=\sum_{j=1}^{k}{c_{j}\timesa_{i-j}}\)。其中\(b_{1\dotsk}\)和\(c_{1\dotsk}\)是给定的自然数。写一个程序,给定自然数\(m\len\),计算\(\left(\su......
  • bzoj 2049 [Sdoi2008]Cave 洞穴勘测
    2049:[Sdoi2008]Cave洞穴勘测TimeLimit: 10Sec  MemoryLimit: 259MBSubmit: 8714  Solved: 4143[Submit][Status][Discuss]Description辉辉热衷......
  • [SDOI2008] 仪仗队【题解】
    题目描述作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的\(N\timesN\)的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所......
  • BZOJ4698-[sdoi2008] Sandy的卡片
    [sdoi2008]Sandy的卡片时限0.5sSandy和Sue的热衷于收集干脆面中的卡片。然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型。......
  • [欧拉函数] P2158 [SDOI2008] 仪仗队
    题目描述作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N\timesNN×N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所......
  • BZOJ 2190([SDOI2008]仪仗队-O(n)线性筛欧拉函数)
    2190:[SDOI2008]仪仗队TimeLimit: 10Sec  MemoryLimit: 259MBSubmit: 521  Solved: 331[​​Submit​​][​​Status​​][​​Discuss​​]Descri......
  • [SDOI2008]Sue的小球
    做题时间:2022.9.26\(【题目描述】\)一个平面直角坐标系中有\(N\)个小球,第\(i\)个小球初始时位于\((x_i,y_i)\),有一个速度\(v_i\),每一秒会沿着\(y\)轴竖直想下掉......