HDU 1319 Prime Cuts 素数水题

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