代码如下:
#include
int foundit(int i) // 按照题意,定义了一个函数,判断是否素数
{
int avg;
int k;
avg=(int)sqrt(i);
for (k=3;k<=avg;k+=2) // 直接从 3 开始,因为 i 是奇数。
if (i % k ==0) // 余数为0,说明不是素数
return 0;
return 1;
}
int main()
{
int i; // 循环变量
int sushu=2; // 2是素数,直接保存下来。
for(i=3;i<1000;i+=2) // 扫描 3 到 1000 之间的所有奇数
{
if(foundit(i)==1)
{
if(i-sushu==2)
printf("%d 和 %d、",sushu,i);
sushu=i;
}
}
return 0;
}
运行的结果:
3和5、5和7、11和13、17和19、29和31、41和43、59和61、71和73、101和103、107和109、137和139、149和151、179和181、191和193、197和199、227和229、239和241、269和271、281和283、311和313、347和349、419和421、431和433、461和463、521和523、569和571、599和601、617和619、641和643、659和661、809和811、821和823、827和829、857和859、881和883
#include
#include
int main()
{
typedef int bool;
const int true=1;
const int false=0;/*写多了C++用bool习惯了*/
int i,j;
bool s[1001];/*s[i]==false表示i为素数*/
memset(s,0,sizeof(s));
for(i=1;i<=1000;i++){/*一遍循环枚举所有可能的数*/
if(!s[i]){/*合数的倍数已经计算过,不用再算*/
for(j=2;j*i<=1000;j++){/*第二遍循环枚举i的倍数*/
s[i*j]=true; /*标记合数*/
}
}
}
for(i=1;i<=998;i++){
if((!s[i]) && (!s[i+2])){/*如果i和i+2都是合数*/
printf("%d %d\n",i,i+2);/*输出*/
}
}
return 0;
}
#include
int p[1000]={2};
void P(){
int i,j,k,s,d;
for(i=1;i<1000&&p[i-1]<1000;i++)
for(j=p[i-1]+1;;j++){
d=1;
for(k=0;k if(j%p[k]==0)d=0;
if(d){
p[i]=j;
break;}}
for(i=0;i<1000&&p[i+1]<1000;i++)
if(p[i]+2==p[i+1])printf("%d %d\n",p[i],p[i+1]);}
int main(){
P();
return 0;}