zoukankan      html  css  js  c++  java
  • nyoj 26-孪生素数问题(打表)

    26-孪生素数问题


    内存限制:64MB 时间限制:3000ms Special Judge: No
    accepted:10 submit:43

    题目描述:

    写一个程序,找出给出素数范围内的所有孪生素数的组数。一般来说,孪生素数就是指两个素数距离为2,近的不能再近的相邻素数。有些童鞋一看到题就开始写程序,不仔细看题,咱们为了遏制一下读题不认真仔细的童鞋,规定,两个素数相邻为1的也成为孪生素数。

    输入描述:

    第一行给出N(0<N<100)表示测试数据组数。
    接下来组测试数据给出m,表示找出m之前的所有孪生素数。
    (0<m<1000000)

    输出描述:

    每组测试数据输出占一行,该行为m范围内所有孪生素数组数。

    样例输入:

    1
    14

    样例输出:

    4

    分析:
      ①、因为每次测试都有多组数据且都在1e6以内,考虑到数据量不是很大,所以我们可以先将每一个点n的(0, n)区域中的孪生素数计算出来,放在一个数组中
      ②、当需要的时候,可以直接通过数组的对应关系确定该点的孪生素数个数
      ③、说明:距离只差为1的素数其实只有一对(即就是2 、 3)

    步骤:
      ①、打表
      ②、通过表输出孪生素数个数

    核心代码:
      
     1 for(int i = 4; i < MAXN; ++ i)
     2 {
     3     if(is_pritme(i))
     4     {
     5         if(i - a == 2) A[i] = A[i-1] + 1;
     6         else A[i] = A[i-1];
     7         a = i;
     8     }
     9     else
    10     {
    11         A[i] = A[i-1];
    12     }
    13 }
    
    
    

    C/C++代码实现(AC):

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <cstdio>
     6 #include <queue>
     7 #include <set>
     8 #include <map>
     9 #include <stack>
    10 
    11 using namespace std;
    12 const int MAXN = 1e6 + 10;
    13 int A[MAXN] = {0, 0, 0, 1};
    14 
    15 bool is_prime(int n)
    16 {
    17     int temp = sqrt(n);
    18     for(int i = 2; i <= temp; ++ i)
    19         if(n%i == 0) return false;
    20     return true;
    21 }
    22 
    23 void cal_excel()
    24 {
    25     int a = 3;
    26     for(int i = 4; i < MAXN; ++ i)
    27     {
    28         if(is_prime(i))
    29         {
    30             if(i - a == 2) A[i] = A[i-1] + 1;
    31             else A[i] = A[i-1];
    32             a = i;
    33         }
    34         else
    35         {
    36             A[i] = A[i-1];
    37         }
    38     }
    39     return ;
    40 }
    41 
    42 int main ()
    43 {
    44     cal_excel();
    45     int t;
    46     scanf("%d", &t);
    47     while(t --)
    48     {
    49         int n;
    50         scanf("%d", &n);
    51         printf("%d
    ", A[n]);
    52     }
    53     return 0;
    54 }

  • 相关阅读:
    JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
    在MOSS中使用无刷新的日历日程控件
    VCalendar不错的开源日历项目
    非常适用的Exchange 2007 Web Services
    在C#中实现DateDiff功能
    Div被Select挡住的解决办法
    安装Project Server2007出现错误
    vs2005中调试js(转)
    CrystalReports在MOSS下的新问题:来自磁盘上的图片不能显示
    关于多级审批工作流的问题描述
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/9066927.html
Copyright © 2011-2022 走看看