8、找出100-300之间的所有强素数 强素数:如果一个素数大于其相邻两个素数的均值,则该项素数是强素数。
我是用这个方法求素数的
怎么对素数进行比较?
#include<stdio.h>
#include<math.h>
void main()
{
int x,i,k=0;
bool t;
for(x=101;x<300;x+=2)
{
t=true;
for(i=2;i<=sqrt((float)x);i++)
{
if(x%i==0)
{
t=false;
break;
}
}
if(t)
{
printf("%5d",x);
k++;
if(k%10==0)
printf("\n");
}
}
}
先用一个数组把100-300之间的素数存储下来,然后遍历这个数组,将数组当前位置和前一个位置和后一个位置值的均值比较,如果大于0就打印,代码修改如下:
#include<stdio.h>
#include<math.h>
int main()
{
int x,i,k=0;
bool t;
int prime[201];
printf("100-300之间所有的素数为:\n");
for(x=101;x<300;x+=2)
{
t=true;
for(i=2;i<=sqrt((float)x);i++)
{
if(x%i==0)
{
t=false;
break;
}
}
if(t)
{
prime[k]=x;
printf("%5d",x);
k++;
if(k%10==0)
printf("\n");
}
}
//寻找100-300之间的强素数
int j,p=0;
int prePrime =prime[0],nextPrime=prime[2];
printf("\n100-300之间所有的强素数为:\n");
for(j=0;j<k-1;j++){
double strongPrimeResult = (double)(prime[j]-(prePrime+nextPrime)/2);
if(strongPrimeResult>0){
// printf("prime[%d]=%d,prePrime=%d,nextPrime=%d,强素数=%d\n",j,prime[j],prePrime,nextPrime,prime[j]);
printf("%5d",prime[j]);
p++;
if(p%10==0)
printf("\n");
prePrime=prime[j];
nextPrime=prime[j+2];
}
}
return 0;
}
你可以把所有100~300的素数存在一个集合里面啊,然后就循环比较一下,左边+右边 除以2 跟中间的比一下。