牛客网Wannafly挑战赛25A 因子 数论

正解:小学数学数论

解题报告:

传送门

大概会连着写几道相对而言比较简单的数学题,,,之后就会比较难了$QAQ$

所以这题相对而言还是比较水的,,,

首先这种题目不难想到分解质因数趴,,

于是就先对p和n!分别分解下质因数什么的

然后分别考虑每个质因数的指数,答案就是指数之商的min

太显然了不想解释

(感觉好像说得不太清楚,,,随便解释下趴$QAQ$

设$n!=w_{1}^{p_1}\cdot w_{2}^{p_2}\cdot...,p=w_{1}^{q_1}\cdot w_{2}^{q_2}\cdot...$

答案就$min{\frac{p_1}{q_1}}$

$over!$

 

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rp(i,a,b) for(register ll i=a;i<=b;++i)
  
ll n,p;
 
inline ll cl1(ll x){ll sum=0,t=n;while(t){sum+=t/x;t/=x;}return sum;}
inline ll cl2(ll x){ll sum=0;while(p%x==0){sum++;p/=x;}return sum;}
inline ll read()
{
    char ch=getchar();ll x=0;bool y=1;
    while(ch!='-' && (ch>'9' || ch<'0'))ch=getchar();
    if(ch=='-')ch=getchar(),y=0;
    while(ch>='0' && ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=getchar();
    return y?x:-x;
}
  
unsigned ll ans=1e18;
 
int main()
{
    n=read();p=read();
    rp(i,2,p)if(p%i==0){ans=min(ans,(unsigned ll)cl1(i)/cl2(i));}
    printf("%lld\n",ans);
    return 0;
}
View Code

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值