数论 D - 寒假安排 --acdream ACdream原创群赛(12)のBUAA选拔赛
2014-06-04 20:13
399 查看
题:http://acdreamoj.sinaapp.com/
思路:By kuangbin
把K进行质因子分解下,就知道P(n,m) 中含有多少个该质因子了。
然后取最小值
比如 k = p1^k1 * p2^k2 …..pi^ki
如何求出P(n,m) 有多少个pi ,假如有x个,那么所有的 x/ki 求最小值就是答案了
思路:By kuangbin
把K进行质因子分解下,就知道P(n,m) 中含有多少个该质因子了。
然后取最小值
比如 k = p1^k1 * p2^k2 …..pi^ki
如何求出P(n,m) 有多少个pi ,假如有x个,那么所有的 x/ki 求最小值就是答案了
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<vector> #include<iostream> #include<string> #include<queue> #include<map> #include<algorithm> #include<math.h> using namespace std; #define ull unsigned long long #define ll long long #define mem(a,b) memset(a,b,sizeof(a)) #define inf 0x3f3f3f3f #define eps 1e-7 int cnt; int a[30],b[30]; void calc(ll k) { ll i,j; for(i=2;i*i<=k;i++) { if(k%i==0) { a[cnt]=i; b[cnt]=0; while(k%i==0) { k/=i; b[cnt]++; } cnt++; } } if(k!=1) { a[cnt]=k; b[cnt]=1; cnt++; } } int solve(ll n,int x) { ll sum=1; int ans=0; while(sum<=n) { sum*=x; ans+=n/sum; } return ans; } int main() { int t; scanf("%d",&t); while(t--) { ll n,m,k,i,j; cin>>n>>m>>k; cnt=0; calc(k); int mn=inf; m=n-m; for(i=0;i<cnt;i++) { int tn,tm; tn=solve(n,a[i]); tm=solve(m,a[i]); tn-=tm; tn/=b[i]; mn=min(tn,mn); } cout<<mn<<endl; } }
相关文章推荐
- 数论 A - 梦 -----acdream ACdream原创群赛(12)のBUAA选拔赛
- [ACdream原创群赛(12)のBUAA选拔赛]E:签到
- ACdream原创群赛(12)のBUAA选拔赛 A - 梦
- ACdream原创群赛(12)のBUAA选拔赛
- 数学训练----数论-寒假安排
- ACdream 1084 寒假安排(数论(k进制末位的0的数目+n!中v因子个数))
- 拓扑排序 I - barty的智商 acdream ACdream原创群赛(12)のBUAA选拔赛
- 关于本次寒假的一些安排
- 2010 08 12安排
- 洛谷P1390 公约数的和 [2017年6月计划 数论12]
- SCNU_2013省赛选拔赛#2(Just for 12)解题报告
- ACdream 寒假安排(求n!中v因子的个数 )
- Acdream1084 寒假安排 求n!中v因子个数
- 学习进度安排表(13/12/2——13/12/8)
- 寒假C语言学习安排
- ACdream 1084 寒假安排 (数学题)
- 中南林业科技大学2012寒假放假时间安排
- 寒假安排 求n !中v因子的个数
- 2016寒假训练——数论
- 学习进度安排表(13/12/9——13/12/15)