本节探讨连续合数问题,实际上还是与素数密切相关;
最多连续合数区间中不能存在素数,最小连续n个合数中也不能存在素数;
最多连续合数区间
试在指定区间 [c,d] 内探求最多连续合数的个数及最多连续合数的起始与终止数;
例如输入c,d:10,100,在区间[10,100]内最多连续合数的个数为7个,所求得的连续合数区间为:[90,96];
下面应用试商法与筛法两种设计分别求解;
应用试商设计:
1.说明:
对指定区间[c,d]内的每一个奇数i应用试商法判别是否为素数,若i(t=0)为素数,则i-f(f为i前面的素数)与max比较以求取最多并用变量f1和i1记录;
随后,f=i即把素数i赋值给f,为下一个素数进行比较做准备;
最多连续合数的起始数f+1有可能与区间起始数c重合,因而当c为偶数或非素数时有必要作赋值:f=c-1;
注意:以上比较所得max不是f与i之间的合数个数,max比f与i之间的合数个数多了1;
2.程序设计:
#include<stdio.h>
#include<math.h>
int main()
{
long c,d,i,j,f,t,f1,i1,max;
printf("请输入c,d(2<c<d):");
scanf("%ld,%ld",&c,&d);
f=c;
max=0;
if(c%2!=0)
{
for(t=0,j=3;j<=sqrt(c);j+=2) /*试商判别下限c是否为素数*/
if(c%j==0)
{
t=1;
break;
}
}
if(c%2==0||t==1) /*令c-1为素数并赋值给f*/
f=c-1;
if(c%2==0)
c++;
for(i=c;i<