连续合数探求

文章探讨了如何使用试商法和筛法在指定区间内寻找最多的连续合数区间以及最小的连续n个合数。通过算法设计与程序示例,解释了如何在区间内排除素数,找到符合条件的合数序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节探讨连续合数问题,实际上还是与素数密切相关;

最多连续合数区间中不能存在素数,最小连续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<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值