整数搜索之最小连续m个合数

整数搜索之最小连续m个合数

问题描述:
对于指定的正整数m(1<=m<=200),在正整数中搜索最小的连续m个合数,输出该区间的起始数与终止数。
设计思想:
最小的连续m个合数介于某两个相邻的素数之间。从f=3开始找相邻的素数f,i构成的区间[f,i],检查此区间中是否有连续m个合数(i-f>m),
若有则输出:[f+1,f+m],搜索结束。
否则:f=i,找下第一个相邻的素数构成的区间[f,i],继续判断。

具体实现:

#include 
#include 

int main()
{
	long i, j, f, t, m;
  	printf("  请输入 m:"); scanf("%ld", &m);
  	printf("  最小的连续%ld个合数的区间为:", m);
  	i=f=3;
  	while(1)
  	{
  		i += 2;
   		for(t = 0, j = 3; j <= sqrt(i); j += 2)         // 试商判别素数
   		{
         	if(i % j == 0) {
         		t = 1; 
         		break;
         	}
   			if(t == 0) {                           // t为0表明i为素数
     			if(i - f > m) {
					printf("[%ld, %ld]",f + 1,f + m); 
					return 0;
				}
          		f=i;                           // f为i的前一个素数
     		}                                 
  		}
  	}
  	return 0;
 }

你可能感兴趣的:(笔记)