/*
* 求100以内所有可以表示为连续素数之和的素数。
* 素数i和j(i<j)为连续素数是指不存在素数k使得i<k<j成立。
* 例如:2、3、5、7就是一组连续素数,5、11不是连续素数。
* 正确的输出结果如下(共十一个素数满足条件):
* 小于100的素数中满足条件的素数为:
* 5=2+3
* ......
* 83=11+13+17+18+23
* 97=29+31+37
*/
#include <stdlib.h>
#include <stdio.h>
int primes[1000];
int isPrime(int n)
{
int i,j;
if(n == 1) return 0;
for(i=2,j=(int)sqrtl(n);i<=j;i++)
if(n%i==0) return 0;//不是质数
printf("%d ",n);
return 1; //是质数
}
int match(int index) //判断第i个质数是否满足条件
{
int sum;
int i,j,k;
for(i=0; i<index; i++)
{
sum = 0;
for(j=i; j<index; j++)
{
sum += primes[j];
if(primes[index] == sum)
{
printf("%d = ",primes[index]);
for(k=i; k<j; k++)printf("%d + ",primes[k]);
printf("%d\n",primes[k]);
return 1;
}
}
}
return 0;
}
int main(int argc, char *argv[])
{
int i,j,low,high,count=0,n;
printf("Please input n : ");
scanf("%d",&n);
printf("\n");
for(i=2;i<n;i++){
if(isPrime(i))
primes[count++]=i;
}
printf("\n一共%d个质素\n\n满足条件的素数为:\n",count);
for(i=0;i<count;i++)
match(i);
getchar();
}
求任意数以内所有可以表示为连续素数之和的素数。
最新推荐文章于 2023-09-24 21:34:36 发布