• BZOJ 2186 [Sdoi2008]沙拉公主的困惑


    Description

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

    Input

    第一行为两个整数T,R。R<=10^9+10,T<=10000,表示该组中测试数据数目,R为模后面T行,每行一对整数N,M,见题目描述 m<=n

    Output

    共T行,对于每一对N,M,输出1至N!中与M!素质的数的数量对R取模后的值

    Sample Input

    1 11
    4 2

    Sample Output

    1

    数据范围:
    对于100%的数据,1 < = N , M < = 10000000
     
    题解放黄学长博客了,毕竟我自己也没做出来
    http://hzwer.com/5863.html
     1 #include<cstdio>
     2 #define ll long long
     3 const int maxn=10000010;
     4 int r,t,m,n,fac[maxn],ine[maxn],pri[maxn],cnt,ans[maxn]; 
     5 bool mark[maxn];
     6 void exgcd(int a,int b,int &x,int &y){
     7     if (b==0){
     8         x=1;
     9         y=0;
    10         return;
    11     }
    12     exgcd(b,a%b,x,y);
    13     int t=x; x=y;y=t-(a/b)*y;
    14 }
    15 
    16 int getine(int t){
    17     int x,y;
    18     exgcd(t,r,x,y);
    19     return (x%r+r)%r;
    20 }
    21 
    22 void pre(){
    23     fac[1]=1; for (int i=2;i<=maxn;i++) 
    24     fac[i]=(ll)fac[i-1]*i%r;
    25     ine[1]=1;
    26     for (int i=2;i<=maxn;i++){
    27         if (!mark[i]) pri[++cnt]=i,ine[i]=getine(i);
    28         for (int j=1;pri[j]*i<=maxn&&j<=cnt;j++){
    29             mark[pri[j]*i]=1;
    30             if (i%pri[j]==0) break;
    31         }
    32     }
    33     ans[1]=1;
    34     for (int i=2;i<=maxn;i++){
    35         ans[i]=ans[i-1];
    36         if (!mark[i]) ans[i]=(ll)ans[i]*(i-1)%r*ine[i]%r;
    37     }
    38 }
    39 
    40 int main(){
    41     scanf("%d%d",&t,&r);
    42     pre();
    43     for (int i=0;i<t;i++){
    44         scanf("%d%d",&n,&m);
    45         printf("%d
    ",(ll)fac[n]*ans[m]%r);
    46     }
    47 }
  • 相关阅读:
    利用WinCE的精准计时函数来输出pwm信号以便控制舵机
    leafletjs旋转marker
    centos7 NodeJs安装问题:Error: Cannot find module '../lib/utils/unsupported.js'
    Django 自定义存储上传文件的文件名
    后端开发不会前端之表格插件的使用
    Django项目部署之sqlite版本升级
    SQL 循环30日
    SSRS 报表 报表迁移
    SQL SERVER中求上月、本月和下月的第一天和最后一天
    SSRS 报表 日期类表达式
  • 原文地址:https://www.cnblogs.com/wuminyan/p/5117391.html
Copyright © 2020-2023  润新知