Noip201502统计质数

来源:互联网 发布:php final类 编辑:程序博客网 时间:2024/06/06 13:16
Jam看着趣味数学书上从中心一圈圈向外盘绕的数字方阵(见示意图),忽然发现前4个质数恰好是前4个拐点,他突发奇想地猜测:“所有拐点上的数会不会都是质数?”或者“位于拐弯位置(拐点)的数中包含质数的比例很高?”你能否编程帮他解决“前n个拐点中有多少个是质数?”的问题?

      示意图

7  6  5      ↓←←
8  1  4      ↓↓↑
9  2  3      ↓→↑
10……        →……


输入
只有一个正整数n。
输出
只有质数总数这一个正整数。
输入示例
6
输出示例
5
其他说明
数据范围:对于100%的数据,n<10000。


题解:


先说一下意思,从1往外扩。

步骤:

1


1

2


1

2 3


1 4

2 3


   5

1 4

2 3


6  5

1 4

2 3

7 6  5

   1 4

   2 3


7 6  5

8 1 4

   2 3

7 6  5

8 1 4

9  2 3



之后拐点是:

2    3       5   7    10    13    17    21    26

  +1   +2   +2   +3   +3    +4    +4   +5

看懂了吗?

代码如下:

#include <iostream>
#include <cmath>
using namespace std;
int a[999999];
int main()
{
    int i,j,n,jishu=2,t=2,q=1;
    cin>>n;
    a[0]=2;
    a[1]=3;
    bool flag;
    for(i=2;i<n;i++)
    {
       if(q==1)
       {
          a[i]=a[i-1]+t;
          q++;
          
          flag=true;
          for(j=2;j<=sqrt(a[i]);j++)
            {
              if(a[i]%j==0)
               {
                 flag=false;
                 break;
                }
            }
            if(flag==true)
            jishu++;
       }
       else
       {
         a[i]=a[i-1]+t;
         q=1;
         t++;
         
         flag=true;
         for(j=2;j<=sqrt(a[i]);j++)
            {
              if(a[i]%j==0)
               {
                 flag=false;
                 break;
                }
            }
            if(flag==true)
            jishu++;
       }
    }
    cout<<jishu<<endl;
    system ("pause");
    return 0;
}

 


1 0
原创粉丝点击