时间限制:3000ms | 内存限制:65535KB
难度:3
描述
给定两个数n,m,其中m是一个素数。
将n(0<=n<=2^31)的阶乘分解质因数,求其中有多少个m。
注:^为求幂符号。
输入第一行是一个整数s(0<s<=100),表示测试数据的组数随后的s行, 每行有两个整数n,,m。输出输出m的个数样例输入3100 516 21000000000 13样例输出241583333329
分析:
这道题的关键是效率,找出最有效的算法。(和《编程之美》上的某道题类似)
#include <iostream>#include <cstring>#include <string>using namespace std;int main(){int s,n,m,ans;cin>>s;while(s–){cin>>n>>m;ans=0;if(n<2)cout<<ans<<endl;else{while(n/m){ans+=(n/m);n/=m;}}cout<<ans<<endl;}return 0;}
如果心在远方,只需勇敢前行,梦想自会引路,