Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1552 Accepted Submission(s):
1036
#include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> #include<string> #include<vector> #include<iostream> #include<cstring> #define inf 0x3f3f3f3f using namespace std; #define ll long long const int maxx=1e6+5; int cnt[maxx];///下标是自然数,内容是这个自然数有多少个因子 int ans[maxx];///下标是因子数,内容是含有这么多因子数最小是哪个数 void init()//埃氏筛打表 { memset(ans,-1,sizeof(ans)); memset(cnt,0,sizeof(cnt)); for(int i=1;i<maxx;i++) { for(int j=i;j<maxx;j=j+i) { cnt[j]++; } if( ans[ cnt[i] ]==-1 )///i从1开始,越变越大,因子数也会越来越多 ans[ cnt[i] ]=i;///ans的下标 第一次遇见 没有遇见过的因子数目,就把i传进去,此时的i最小 } } int main()///hdu3189 { init(); int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); if(ans[n]>1000) printf("-1\n"); else printf("%d\n",ans[n]); } return 0; }
hdu3189-Just Do It-(埃氏筛+唯一分解定理)
原文:https://www.cnblogs.com/shoulinniao/p/10357512.html