您的位置:首页 > 产品设计 > UI/UE

Sequence - URAL 1528 水题

2014-07-23 18:28 525 查看


1528. Sequence

Time limit: 3.0 second

Memory limit: 64 MB

You are given a recurrent formula for a sequence f:

f(n) = 1 + f(1)g(1) + f(2)g(2) + … + f(n−1)g(n−1),

where g is also a recurrent sequence given by formula

g(n) = 1 + 2g(1) + 2g(2) + 2g(3) + … + 2g(n−1) − g(n−1)g(n−1).

It is known that f(1) = 1, g(1) = 1. Your task is to find f(n) mod p.

Input

The input consists of several cases. Each case contains two numbers on a single line. These numbers are n (1 ≤ n ≤ 10000) and p (2 ≤ p ≤ 2·109).
The input is terminated by the case with n = p = 0 which should not be processed. The number of cases in the input does not exceed 5000.

Output

Output for each case the answer to the task on a separate line.

Sample

inputoutput
1 2
2 11
0 0

1
2


思路:其实就是n的阶乘取模。

AC代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
typedef long long ll;
using namespace std;
ll f[10010],mod;
int main()
{ int n,i,j,k;
  f[1]=1;
  while(~scanf("%d%I64d",&n,&mod) && n)
  { for(i=2;i<=n;i++)
     f[i]=(f[i-1]*i)%mod;
    printf("%I64d\n",f
);
  }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: