HDU 1319 Prime Cuts 素数水题

View Code
#include<cstdio>
#include<cstring>
#include<cmath>
int p[1004], tot;
bool vis[1104];
void init() // 素数打表,注意本题1也是素数
{
    int i, j;
    for(i = 2; i * i <= 1000; i++)
        for(j = i*i; j <= 1000; j += i)
            vis[j] = 1;
    for(i = 1; i <= 1000; i++)
        if(!vis[i])p[tot++] = i; 
}

int main()
{
    int n, m, i, j;
    init();
    while( ~scanf("%d%d", &n, &m))
    {
        printf("%d %d:", n, m);
        int cnt = 0;
        while(p[cnt] <= n && cnt < tot) cnt++;    //统计素数个数
        int c = (cnt>>1) - (m - (cnt&1) ); //
        c = (c < 0) ? 0 : c;            //以上两步确定打印的起始 c
        for(i = c; i < c + 2*m-(cnt&1) && i < cnt; i++) //确定打印个数
            printf(" %d", p[i]);
        puts("\n");
    
    }
    return 0;
}

#include<cstdio>
#include<cstring>
#include<cmath>
int p[1004], tot;
bool vis[1104];
void init() // 素数打表,注意本题1也是素数
{
    int i, j;
    for(i = 2; i * i <= 1000; i++)
        for(j = i*i; j <= 1000; j += i)
            vis[j] = 1;
    for(i = 1; i <= 1000; i++)
        if(!vis[i])p[tot++] = i; 
}

int main()
{
    int n, m, i, j;
    init();
    while( ~scanf("%d%d", &n, &m))
    {
        printf("%d %d:", n, m);
        int cnt = 0;
        while(p[cnt] <= n && cnt < tot) cnt++;    //统计素数个数
        int c = (cnt>>1) - (m - (cnt&1) ); //
        c = (c < 0) ? 0 : c;            //以上两步确定打印的起始 c
        for(i = c; i < c + 2*m-(cnt&1) && i < cnt; i++) //确定打印个数
            printf(" %d", p[i]);
        puts("\n");
    
    }
    return 0;
}

 

posted @ 2012-12-04 21:09  To be an ACMan  Views(248)  Comments(0)    收藏  举报