codevs 2947 饥饿数列
题目描述 Description
Iahub和Iahubina去一家豪华餐厅约会,然而到了付账时,收银员不向他们收取餐费,而是要求他们写出一个数列。对这个数列的要求如下:
1、数列的长度为n
2、对于数列中的任意两个满足i<j的数ai、aj,要求ai<aj。
3、对于数列中的任意两个满足i<j的数ai、aj,要求ai不能整除aj。
输入描述 Input Description
一个数n
输出描述 Output Description
一行,n个数,所求数列。
如果有多种可行数列,输出字典序最小的一个。
样例输入 Sample Input
3
样例输出 Sample Output
2 3 5
数据范围及提示 Data Size & Hint
0<n<=105
代码:
/* 筛法 */ #include<cstdio> using namespace std; int n,tot; bool a[1300001]; void shai() { for(long long i=2;i<=1300000;i++) if(a[i]==0) for(long long j=2*i;j<=1300000;j+=i) a[j]=1; } int main() { scanf("%d",&n); if(n==1) { printf("1"); return 0; } long long i=2; shai(); while(tot<n) { if(a[i]==0) printf("%lld ",i),tot++; i++; } return 0; }