カトラン数の性質を用い,高精度圧位,ふるい法による素数探しを行った.
1752 ワード
1列の列車のn両の車両、順番に番号が1,2,3,...,nです.
各車両には2つの運動方式があり、入桟と出桟があり、n車両の出桟の可能な配列方式は何種類あるかを聞く.
入力フォーマットは、列車の車両数を表す整数nを入力します.
出力フォーマット出力整数sは、n両の車両スタックの可能な配列数を表す.
データ範囲1≦n≦60000入力サンプル:3出力サンプル:5
この問題の本質はカトラン数だ
カトラン数紹介(math 73参照)
ふるいほうそすう
最も重要なのは,組合せ数をどのように解くか,圧位思想,また組合せ数C(2 n)(n)という式を展開した後,連続した質量数を上下同時に除算する方法で,毎回長い数を1つの数で除去するのではなく,答えを少しずつ集め,運転時間を低減することである.
各車両には2つの運動方式があり、入桟と出桟があり、n車両の出桟の可能な配列方式は何種類あるかを聞く.
入力フォーマットは、列車の車両数を表す整数nを入力します.
出力フォーマット出力整数sは、n両の車両スタックの可能な配列数を表す.
データ範囲1≦n≦60000入力サンプル:3出力サンプル:5
この問題の本質はカトラン数だ
カトラン数紹介(math 73参照)
ふるいほうそすう
最も重要なのは,組合せ数をどのように解くか,圧位思想,また組合せ数C(2 n)(n)という式を展開した後,連続した質量数を上下同時に除算する方法で,毎回長い数を1つの数で除去するのではなく,答えを少しずつ集め,運転時間を低減することである.
#include
#include
#include
using namespace std;
const int N=120010;
int powers[N];//
int primes[N],cnt;/ 2~2*n
bool st[N];//
typedef long long ll;
void get_primes(int n)//
{
for(int i=2;i<=n;i++)
if(!st[i])
{
primes[cnt++]=i;
for(int j=i*2;j<=n;j+=i)
st[j]=true;
}
}
int get(int n,int p)//n p
{
ll s=0;
while(n)
{
s+=n/p;
n/=p;
}
return s;
}
void multi(vector&a,int b)//
{
int t=0;
for(int i=0;i&a)//
{
printf("%lld",a.back());
for(int i=a.size()-2;i>=0;i--)
printf("%08lld",a[i]);
cout<>n;
get_primes(n*2);
for(int i=0;ires;
res.push_back(1);
for(int i=2;i<=n*2;i++)
for(int j=0;j