np問題(大數階乘取模)

2021-07-24 09:43:53 字數 1282 閱讀 2230

題目描述:

lyk 喜歡研究一些比較困難的問題,比如 np 問題。

這次它又遇到乙個棘手的 np 問題。問題是這個樣子的:有兩個數 n 和 p,求 n 的階乘對 p 取模後的結果。

lyk 覺得所有 np 問題都是沒有多項式複雜度的演算法的,所以它打算求助即將要參加 noip的你,幫幫 lyk 吧!

輸入格式(np.in):

輸入一行兩個整數 n,p。

輸出格式(np.out):

輸出一行乙個整數表示答案。

輸入樣例:

3 4

輸出樣例:

2資料範圍:

對於 20%的資料: n,p<=5。

對於 40%的資料: n,p<=1000。

對於 60%的資料: n,p<=10000000。

對於 80%的資料: n<=10^18, p<=10000000。

對於另外 20%的資料: n<=10^18, p=1000000007。

其中大致有 50%的資料滿足 n>=p。

思路:

若n>=p則,!n%p=0

對於%20的資料,p==1000000007,此時分塊打表,每10000000打乙個表,算出階乘對p取模的結果。

打表程式:

#include

#include

#define lon long long

using

namespace

std;

const

int maxn=110;

lon n,p,a[maxn];

int main()

return

0;}

正確程式:

#include

#include

#define lon long long

using

namespace

std;

lon n,p;

lon a[110]=;

int main()

if(p==1000000007)

lon ans=1;

for(int i=1;i<=n;i++)

ans=ans*i%p;

cout

0;}

大數階乘取模

水了90分。如果不會正解的話,直接暴力拿分,無腦暴力可以拿到90分 正解分塊打表 就是直接求階乘然後取模。加乙個比較有用的特判 如果n p,那麼n的階乘的因子中一定有p,n的階乘膜p一定等於0 include include using namespace std long long n,p int...

大數階乘取模

暴力 就是直接求階乘然後取模。加乙個比較有用的特判 如果n p,那麼n的階乘的因子中一定有p,n的階乘膜p一定等於0 include include using namespace std long long n,p intjs int n return ans int main else retu...

51Nod 大數階乘 大數取模

1057 n的階乘 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 輸入n求n的階乘的準確值。input 輸入n 1 n 10000 output 輸出n的階乘input示例 5output示例 120 include define max 1000000 5 using...