zoukankan      html  css  js  c++  java
  • nefu 628 Garden visiting

    //yy:想到昨天一个神题整了几个小时,最后按题解把p拆了用孙子定理、、今天这个简单,把C暴力拆了。。

    题目链接:nefu 628 Garden visiting

    1 <= n, m, p <= 10^5 

    题意:给出n*m的矩形,求从左上角到右下角的路径数(对p取模)。

    题解:答案就是C(m+n-2, m-1),但是不能杨辉三角,而且考虑到p可能为合数、、再看看这个数据范围,可以暴力进行素因子分解哇。。。

     1 #include<cstdio>
     2 using namespace std;
     3 const int N = 2e5+5;
     4 typedef long long ll;
     5 ll n, m, P, a, b, c, sum, ans;
     6 ll pow(ll a,ll b,ll p){for(sum=1,a%=p;b;a=a*a%p,b>>=1)if(b&1)sum=sum*a%p;return sum;}
     7 ll Cnt(ll n, ll p){ll num=0;while(n)num+=n/p,n/=p;return num;}
     8 bool prime[N];
     9 int p[N], tot, t, i, j;
    10 void init(){for(i=2;i<N;i++)prime[i]=true;for(i=2;i<N;i++){if(prime[i])p[tot++]=i;
    11 for(j=0;j<tot&&i*p[j]<N;j++){prime[i*p[j]]=false;if(i%p[j]==0)break;}}}
    12 int main(){
    13     init();
    14     scanf("%d", &t);
    15     while(t--) {
    16         scanf("%lld%lld%lld", &n, &m, &P);
    17         n += (m - 2); m--;
    18         for(ans = 1, i = 0; i < tot && p[i] <= n; ++i) {
    19             a = Cnt(n, p[i]); b = Cnt(m, p[i]); c = Cnt(n-m, p[i]);
    20             a -= (b + c);
    21             ans = ans * pow(p[i], a, P) % P;
    22         }
    23         printf("%lld
    ", ans);
    24     }
    25     return 0;
    26 }
    view code
  • 相关阅读:
    javaWeb下载
    javaWeb上传
    JavaWeb过滤器
    JavaWeb中的监听器
    数据库dbutils
    数据库连接池
    51nod 1837 砝码称重【数学,规律】
    Codeforces Round #437 (Div. 2)[A、B、C、E]
    Codeforces Round #436 (Div. 2)【A、B、C、D、E】
    Codeforces Round #435 (Div. 2)【A、B、C、D】
  • 原文地址:https://www.cnblogs.com/GraceSkyer/p/7239192.html
Copyright © 2011-2022 走看看