zoj 2562 More Divisors
2013-09-14 21:48
246 查看
//经典题,反素数
性质二:p=2^t1*3^t2*5^t3*7^t4.....必然t1>=t2>=t3>=....
搞不懂的是为什么typedef long long 会比 每个long long 快 ,之前一直超时。
//num:当前枚举到的数,k:枚举到的第k大的质因子;sum:该数的约数个数;limit:质因子个数上限;
//l因为性质二 所以可以用limit优化
定义
对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数.性质
性质一:一个反素数的质因子必然是从2开始连续的质数.性质二:p=2^t1*3^t2*5^t3*7^t4.....必然t1>=t2>=t3>=....
搞不懂的是为什么typedef long long 会比 每个long long 快 ,之前一直超时。
//num:当前枚举到的数,k:枚举到的第k大的质因子;sum:该数的约数个数;limit:质因子个数上限;
//l因为性质二 所以可以用limit优化
#include<cstdio> typedef long long ll; ll maxsum,bestnum,n; const int prime[16]={1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47}; void dfs(ll num,ll sum, int k, int limit) { int i; if(sum>maxsum) { bestnum=num; maxsum=sum; } if(maxsum==sum&&num<bestnum) { bestnum=num; } if(k>15) return; ll temp=num; for( i=1; i<=limit; i++) { if(temp*prime[k]>n) break; temp=temp*prime[k]; dfs(temp,sum*(i+1),k+1,i); } } int main() { while(scanf("%lld",&n)!=EOF) { bestnum=1; maxsum=0; dfs(1,1,1,50); printf("%lld\n",bestnum); } return 0; }
相关文章推荐
- ZOJ_2562_More Divisors(反素数)
- zoj 2562 More Divisors(反素数)
- zoj 2562 More Divisors
- Zoj 2562 More Divisors
- timus 1748 The Most Complex Number zoj 2562 More Divisors
- zoj 2562 More Divisors
- ZOJ 2562 More Divisors(高合成数)
- ZOJ 2562 More Divisors 解题报告(反素数)
- zoj 2562 More Divisors(反素数)
- ZOJ 2562 More Divisors(高合成数)
- Zoj 2562 More Divisors (反素数)
- 【ZOJ 2562】 More Divisors
- zoj 2562 More Divisors(反素数)
- Zoj 2562 More Divisors (反素数)
- ZOJ 2562 More Divisors (n以内约数个数最多的最小数)
- zoj 2562 反素数
- zoj 2562 More Divisors
- ZOJ 2562 HDU 4228 反素数
- More Divisors zoj 2562
- ZOJ- 2562 反素数使用