标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5723 Accepted Submission(s): 3355
#include <iostream> #include <stdio.h> using namespace std; int cnt[5005]; void init(){ for(int i=1;i<=5000;i++){ for(int j=1;j*j<=i;j++){ if(i%j==0){ if(j*j==i) cnt[i]++; else{ cnt[i]+=2; } } } } } int main() { init(); int tcase; scanf("%d",&tcase); while(tcase--){ int a,b; scanf("%d%d",&a,&b); int MAX = -1,res=a; for(int i=a;i<=b;i++){ if(cnt[i]>MAX) { MAX = cnt[i]; res = i; } } printf("%d\n",res); } return 0; }
以下是求[1,n]内反素数的模板。参考了acreamer大神:http://blog.csdn.net/ACdreamers/article/details/25049767
/**此模板可求[1,b]之间的反素数*/ #include<stdio.h> #include<string.h> #include <iostream> #include <algorithm> #include <stdlib.h> using namespace std; typedef unsigned long long ULL; const ULL INF = ~0ULL; int p[16] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53}; int ans,n; int best; void dfs(int dept,int limit,ULL tmp,int num) { ///到叶子结点,返回 if(dept >= 16) return; ///num记录的因子个数,如果遇到更小的,就更新 if(num > best) { best = num; ans = tmp; } ///当因子个数相同时,取值最小的 if(num == best && ans > tmp) ans = tmp; for(int i=1;i<=limit;i++) { if(n/p[dept] < tmp) break; dfs(dept+1,i,tmp *= p[dept],num*(i+1)); } } int main() { int tcase; scanf("%d",&tcase); while(tcase--){ scanf("%d",&n); ans =INF; best = 0; dfs(0,63,1,1); ///最大不会超过INF < 2^63 printf("%d\n",ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/liyinggang/p/5624877.html