zoj1312 Prime Cuts

  1. //zoj1312 Prime Cuts
  2. //Accepted 1312 C ++ 00:00.00 844K
  3. #include <iostream>
  4. using namespace std;
  5. int plist[1000],pcnt;
  6. int N,C;
  7.  
  8. void getprime()
  9. {
  10.        plist[0] = 1, plist[1] = 2, plist[2] = 3, pcnt = 3;
  11.        for (int n=5,i; n<=2000; n+=2) {
  12.               for (i=1; plist[i]*plist[i]<=n && n%plist[i]; i++);
  13.               if (plist[i]*plist[i] > n) plist[pcnt++] = n;
  14.        }
  15. //     cout << pcnt << endl;
  16. }
  17.  
  18. void solve()
  19. {
  20.        cout << N << " " << C << ":";
  21.        int i,cnt=0;
  22.        for (; plist[cnt]<=N; cnt++);
  23.        if (cnt%2==0) {
  24.               if (2*C < cnt)
  25.                      for (i=cnt/2-C; i<cnt/2+C; i++)
  26.                             cout << " " << plist[i];
  27.               else
  28.                      for (i=0; i<cnt; i++)
  29.                             cout << " " << plist[i];
  30.        } else {
  31.               if (2*C-1 < cnt)
  32.                      for (i=(cnt+1)/2-C; i<(cnt+1)/2+C-1; i++)
  33.                             cout << " " << plist[i];
  34.               else
  35.                      for (i=0; i<cnt; i++)
  36.                             cout << " " << plist[i];
  37.        }
  38.        cout << endl << endl;
  39. }
  40.  
  41. int main()
  42. {
  43.        getprime();
  44.        while (cin >> N >> C)
  45.               solve();
  46.        return 0;
  47. }
  48.  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值