枚举—最小连续m个合数

题目描述:
在这里插入图片描述算法思想:

  1. 求指定个数m的连续合数可以直接枚举两个质数构成的区间。
  2. 关于质数的确定,偶数质数只有一个即2,奇数质数最小为3。
		// 判断是否为质数
		for(int j=2;j<sqrt(next)+1;j++)
			if(next%j==0){
    
    
				t=0;
				break;
			}
  1. 由已知条件可得m>=1,所以直接从3开始向后寻找质数(next+=2,因为大于2的偶数为合数),再进行判断(两质数之间包含大于等于m个合数)
		// 合数区间长度判定:next-pre 
		if(next-pre>m){
    
    
			if(m!=1)
				cout<<pre+1<<' '<<pre+m<<endl;
			else
				cout<<pre+1<<endl;
			break;
		}

全部代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

const int N = 10;
int a[N] = {
    
    0};
int m;

int main(){
    
    
	cin>>m;
	int next = 3,pre=3;
	while(1){
    
    
		int t=1;
		// 判断是否为质数 
		for(int j=2;j<sqrt(next)+1;j++)
			if(next%j==0){
    
    
				t=0;
				break;
			}
		// 合数区间长度判定:next-pre 
		if(next-pre>m){
    
    
			if(m!=1)
				cout<<pre+1<<' '<<pre+m<<endl;
			else
				cout<<pre+1<<endl;
			break;
		}
		if(t)	pre = next;
		next+=2;
	}
	return 0;
} 

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45666249/article/details/114604220