Uva10780 Again Prime? No Time.
2013-08-05 22:14
417 查看
这题搞了1个多小时= =!靠着UVA的BBS上的数据才过的 思路是:把m质因数分解,各质因数的系数用map(a)记录,把1到n的数都质因数分解,用map(b)记录(累加),然后逐一遍历,碰到a[i]=0则跳过,碰到b[i] = 0& a[i]!= 0 则无解,接下来就是我无法理解地方了,判断前两种情况之后,如果碰到b[i] 无法整除a[i] 的时候,理应是无解,但是我只要这样判 就是WA,如果不判,就是AC。。。希望大神能够赐教
#include <iostream> #include <cstdio> #include <map> #include <cmath> #include <cstring> #include <algorithm> using namespace std; const int maxn = 10000 + 10; const int maxp = 7000; bool vis[maxn]; int prime[maxp]; int num; void sieve(int n){ int m = (int)sqrt(n+0.5); memset(vis,0,sizeof(vis)); for(int i = 2; i <= m; i++) if(!vis[i]){ for(int j = i*i; j <= n; j+= i) vis[j] = 1; } } int gen_prime(int n){ sieve(n); int c = 0; for(int i = 2; i <= n; i++) if(!vis[i]){ prime[c++] = i; //cout<<i<<"@@@"<<endl; } return c; } void factor(int n,map<int,int> &k){ int tmp,i,now; tmp = (int)((double)sqrt(n)+1); now = n; for(i = 2; i <= tmp; i++)if(now %i==0){ while(now%i==0){ ++k[i]; now/=i; } } if(now != 1){ k[now]++; } } int main(){ int ncase,T=1; cin >> ncase; map<int,int> a,b; while(ncase--){ int m,n; a.clear(); b.clear(); scanf("%d%d",&m,&n); //cout<<m<<" "<<n <<endl; num = gen_prime(m); factor(m,a); for(int i = 1; i <= n; i++){ factor(i,b); } int ans = 100000000; bool flag = 0; for(int i = 0; i < num; i++){ if(a[prime[i]] == 0){ continue; } else if(b[prime[i]]==0){ flag = 1; //cout<<"@@@"<<endl; break; } else{ ans = min(ans,b[prime[i]]/a[prime[i]]); } //这一段完全搞不懂??!!! /*else if(b[prime[i]]%a[prime[i]] == 0){ ans = min(ans,b[prime[i]]/a[prime[i]]); } if(b[prime[i]]%a[prime[i]] != 0){ flag = 1; cout<<b[prime[i]]<<" "<<a[prime[i]]<<" "<<prime[i]<<endl; cout<<"!!!!"<<endl; break; }*/ } if(flag){ printf("Case %d:\nImpossible to divide\n",T++); }else{ printf("Case %d:\n%d\n",T++,ans); } //cout<<ans<<endl; } return 0; }
相关文章推荐
- uva 10780 - Again Prime? No Time.(数论)
- UVa 10780 - Again Prime? No time (质因式分解)
- UVa10780 - 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.
- 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.
- Again Prime? No Time.(UVA 10780)
- 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.