求任意数以内所有可以表示为连续素数之和的素数。
/* * 求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();}