读书人

Distinct Primes 击表

发布时间: 2012-09-04 14:19:30 作者: rapoo

Distinct Primes 打表
来源:http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=10907#problem/E

ACM International Collegiate Programming Contest, Asia-Amritapuri Site, 2011题意:至少包含三个素数的数成为Lucky number,现在让求第n个Lucky number。思路:由于n很小(1000),因此可以打表。把这1000个数预处理出来,直接输出即可。代码:
#include <iostream>#include <cstdio>#include <cmath>#include <string.h>using namespace std;#define CLR(arr,val) memset(arr,val,sizeof(val))const int N = 100000;int flag[N],ans[1010];void init(){CLR(flag,0);for(int i = 2; i <= sqrt(N + 0.5); ++i){if(!flag[i]){  for(int j = i * 2; j < N; j += i)  flag[j] = 1;}}int K = 1;for(int i = 30;;++i){  int cnt = 0;  if(!flag[i])  continue;  int s = i;  for(int j = 2;j < N;++j){     if(flag[j]) continue; if(s % j == 0){   cnt++;   while(s%j == 0)   s /= j; } if(cnt >= 3){   ans[K++] = i;   break; }  }  if(K > 1001)  break;}}int main(){init();int numcase;scanf("%d",&numcase);while(numcase--){  int n;  scanf("%d",&n);  printf("%d\n",ans[n]);}return 0;}


读书人网 >编程

热点推荐