Comet OJ 夏季歡樂賽 烤麪包片

烤麪包片html

https://cometoj.com/contest/59/problem/C?problem_id=2698markdown

題目描述flex

 

雞尾酒最喜歡吃東北的烤麪包片了。每次到東北地區的區域賽或者是秦皇島的wannafly camp,雞尾酒都會吃不少的烤麪包片,即便比賽打鐵也以爲不虛此行。spa

「我想吃烤麪包片!!!」這不,半年沒吃烤麪包片的雞尾酒看到你們都彙集在秦皇島參加暑假camp,羨慕地發出了想要的聲音。code

當雞尾酒「想要」的時候,他說的話會帶三個感嘆號來表示很是「想要」。至於有多「想要」,他給了你一個算式讓你來體會。htm

給你兩個整數 nn 和 modmod,輸出 n!!!n!!! 對 modmod 求餘的結果(每一個!! 都表明一個階乘符號)blog

 

 
 

輸入描述get

 

輸入共一行包含兩個整數依序爲 nn 和 modmod,意義如題面所示。(0 \le n \le 10^9,1 \le mod \le 10^90n1091mod109)
input

 

輸出描述it

 

輸出一個小於 modmod 的非負整數表示答案。

 

樣例輸入 1 

2 6324

樣例輸出 1

2

樣例輸入 2 

3 999999999

樣例輸出 2

731393874

提示

在第一個樣例中,因爲 2! = 22!=2,因此 2!!! = (((2!)!)!) = ((2!)!) = (2!) = 22!!!=(((2!)!)!)=((2!)!)=(2!)=2。2模了6324仍是2!

因此答案爲2。

 沒想明白會很難,想明白很水...

你想,加入它大於4的話,用計算器可得三次階乘後會直接爆掉,因此當咱們枚舉的時候就會發現,你在階乘的時候必有一次和mod相等,這樣最後無論數多大最後都得0.

而後再分類討論0,1,2,3就能夠了

CODE:

#include<cstdio>
#define ll long long
using namespace std;
int main()
{
    ll n,mod,ans=1;
    scanf("%lld%lld",&n,&mod);
    if(n>=4)
    {
        printf("0");
        return 0;
    }
    if(n==0)
    {
        printf("%lld",1%mod);
        return 0;
    }
    if(n==1)
    {
        printf("%lld",1%mod);
        return 0;
    }
    if(n==2)
    {
        printf("%lld",2%mod);
        return 0;
    }
    if(n==3)
    {
        for(int i=1;i<=720;i++)
            ans=(ll) (ans*i)%mod;
        printf("%lld",ans);
        return 0;
    }
}
相關文章
相關標籤/搜索