让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
/*************************************************************************************************/
分析:首先要明白素数的含义。素数即该数只能被1和它本身整除,否则为非素数;
由于我们也不清楚在n内有多少个素数,所以用vector来存储n内素数,它是能存放任意类型的动态数组。
接着用判断语句,得出符合题意的素数对的个数。
/*****************************************************************************************************/
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n,num=0;
cin>>n;
vector<int> arra; //定义了一个int型的向量arra
for(int i=1;i<=n;i++)
{
int count=0;
for(int j=2;j<i;j++)
{
if(i%j==0)
{
count++;
break;
}
}
if(count==0) arra.push_back(i); //向向量后面填充元素
}
for(int i=1;i<arra.size();i++)
{
if(arra[i]-arra[i-1]==2) num++;
}
cout<<num;
}
/************************************************************************************/
对我而言,vector的用法难住我了,花费了我很长时间。
我先是定义了 vector<int> arra; 然后按arra[m]=i的方法来存储素数,但是发现存储不进去。
后来我明白了,由于vector是向量。所以我创建了一个int型的头结点arra,里面没有分配空间,所以不能用arra[m]的方式存储。应该用push_back()的方式存储。
如果我事先知道arra数组的大小,则定义为vector<int> arra[n],可以用arra[m]的方式存储。
http://blog.chinaunix.net/uid-26000296-id-3785610.html
/************************************************************************************/