首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Distinct Primes 击表

2012-09-04 
Distinct Primes打表来源:http://acm.hust.edu.cn:8080/judge/contest/view.action?cid10907#problem/EAC

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;}


热点排行