UVa:10780 Again Prime? No Time.
2014-01-19 14:16
281 查看
入门题啊。。总算是让我给想出来了。
先对m分解质因数(这里要注意时间复杂度是根号m,循环外面还有一部分),然后对于枚举1到n,分别去除尽m的每个质因数,统计每个质因数被整除的次数。
最后算m一共被整除多少次即可。
先对m分解质因数(这里要注意时间复杂度是根号m,循环外面还有一部分),然后对于枚举1到n,分别去除尽m的每个质因数,统计每个质因数被整除的次数。
最后算m一共被整除多少次即可。
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <algorithm> #define MAXN 505 #define MOD 1000000007 #define INF 2139062143 #define ll long long using namespace std; struct Number { int val,tot; Number(int a,int b):val(a),tot(b) {} }; int main() { int T,kase=0; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&m,&n); vector<Number> M,res; int temp=(int)((double)sqrt(m)+1),now=m; for(int i=2; i<=temp; ++i) if(now%i==0) { M.push_back(Number(i,0)); res.push_back(Number(i,0)); int t=M.size()-1; while(now%i==0) { M[t].tot++; now/=i; } } if(now!=1) { M.push_back(Number(now,1)); res.push_back(Number(now,0)); } for(int i=1; i<=n; ++i) { now=i; for(int j=0; j<res.size(); ++j) while(now%res[j].val==0) { now/=res[j].val; res[j].tot++; } } int ans=INF; for(int i=0; i<res.size(); ++i) ans=min(ans,res[i].tot/M[i].tot); printf("Case %d:\n",++kase); if(!ans) puts("Impossible to divide"); else printf("%d\n",ans); } return 0; }
相关文章推荐
- UVA 10780 C - Again Prime? No Time.
- UVa 10780-Again Prime? No Time.
- UVA 10780 - Again Prime No Time
- UVA - 10780 Again Prime? No Time. (质因子分解)
- UVa 10780 - Again Prime? No time (质因式分解)
- UVA 10780 - Again Prime? No Time.(数论)
- UVa10780 - Again Prime?No time.(质因数分解)
- Again Prime? No Time.(UVA 10780)
- uva 10780 Again Prime? No Time.
- uva 10780 - Again Prime? No Time.(数论)
- UVA 10780 Again Prime? No Time. [质因子分解]【数论】
- UVA10780:Again Prime? No Time(数论)
- UVA 10780 Again Prime? No Time(质因数分解)
- uva 10780 Again Prime? No Time.
- uva10780 - Again Prime? No time
- UVA 10780-Again Prime? No Time. (数学-质因子)
- UVA 10780 - Again Prime? No Time.
- UVa 10780 - Again Prime? No Time.(唯一分解)
- UVA-10780-Again Prime? No Time(素数分解)
- UVA 10780 Again Prime? No Time. 分解质因子