链接:https://www.nowcoder.com/acm/contest/135/C
来源:牛客网
题目描述
其中,f(1)=1;f(2)=1;Z皇后的方案数:即在Z×Z的棋盘上放置Z个皇后,使其互不攻击的方案数。
输入描述:
输入数据共一行,两个正整数x,m,意义如“题目描述”。
输出描述:
一个正整数k,表示输出结尾0 的个数或者放置皇后的方案数
示例1
输入
375 16
输出
14200
说明
鸣谢真·dalao Tyxao
#include<math.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
#define ll long long
ll f[100],x,m,k;
int a[100]={-1,1,0,0,2,10,4,40,92,352,724,2680,14200,73712,365596};
int main(void)
{
bool flag=0;
f[1]=f[2]=1;
for(int i=3;i<=100;i++)
f[i]=f[i-1]+f[i-2];
scanf("%lld%lld",&x,&m);
for(int i=1;i<=80;i++)
if(f[i]==x)
flag=1;
if(flag)
{
ll ans=1e18,sm1,sm2;
for(int i=2;i<=100;i++)
{
if(m%i) continue;
sm1=sm2=0;
while(m%i==0) sm1++,m/=i;
ll tmp=x;
while(tmp)
sm2+=tmp/i,tmp/=i;
ans=min(ans,sm2/sm1);
}
printf("%lld\n",ans);
}
else
{
ll z=x%min(13ll,m+1)+1;
printf("%d\n",a[z]);
}
return 0;
}