zoukankan      html  css  js  c++  java
  • HDU 1216 Assistance Required 埃拉托色尼色筛法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1216

    思路:色筛法

    代码(1):

     1 #include<iostream>//--------1216 HDU   埃拉托色尼筛选法
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<algorithm>
     5 #include<math.h>
     6 #include<string.h>
     7 #include<vector>
     8 using namespace std;
     9 #define Max 40000
    10 bool b[Max];
    11 __int64 a[Max], c;
    12 void fun()
    13 {
    14     __int64 i, j, count;
    15     c = 0;
    16     memset(b, true, sizeof(b));
    17     b[1] = 0;
    18     for (i = 2; i < Max; ++i)
    19     {
    20         if (b[i])
    21         {
    22             a[++c] = i;
    23             count = i;
    24             for (j = i+1; j < Max; ++j)
    25             {
    26                 if (b[j] == true)
    27                     count--;
    28                 if (count == 0)
    29                 {
    30                     b[j] = false;
    31                     count = i;
    32                 }
    33             }
    34         }
    35     }
    36 }
    37 int main()
    38 {
    39     fun();
    40     int n;
    41     while (scanf("%d", &n) != EOF)
    42     {
    43         if (n == 0)
    44             break;
    45         else
    46             printf("%d
    ", a[n]);
    47     }
    48     return 0;
    49 }
    View Code

    基本类似的另外一种:

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<cstdlib>
     4 #include<string.h>
     5 #include<algorithm>
     6 #include<math.h>
     7 using namespace std;
     8 #define Max 40000
     9 __int64 ans[Max];
    10 __int64 pop[3001];
    11 void dfs()
    12 {
    13     __int64 i, j, count;
    14     for (i = 2; i < Max; i++)
    15     {
    16         ans[i] = i;
    17     }
    18     for (i = 2; i < Max; i++)
    19     {
    20         if (ans[i] != 0)
    21         {
    22             count = i;
    23             for (j = i + 1; j < Max; j++)
    24             {
    25                 if (ans[j] != 0)
    26                     count--;
    27                 if (count == 0)
    28                 {
    29                     ans[j] = 0;
    30                     count = i;
    31                 }
    32             }
    33         }
    34         
    35     }
    36     j = 2;
    37     for (i = 1; i <= 3000; i++)
    38     {
    39         while (ans[j] == 0)
    40         {
    41             j += 1;
    42         }
    43         if (ans[j] != 0)
    44         {
    45             pop[i] = ans[j];
    46             j += 1;
    47         }
    48     }
    49 }
    50 int main()
    51 {
    52     dfs();
    53     int n;
    54     while (scanf("%d", &n)&&n)
    55     {
    56             printf("%d
    ", pop[n]);
    57     }
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    北京Uber优步司机奖励政策(2月20日~2月21日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(2月20日~2月21日)
    成都Uber优步司机奖励政策(2月19日)
    Linux
    Linux
    Linux
    Linux
    Linux
    Linux
    Linux
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7776152.html
Copyright © 2011-2022 走看看