列挙型-最小連続m合成数

タイトルの説明:
ここに画像の説明を挿入アルゴリズムのアイデア:

  1. 指定された数mの連続合成数を見つけると、2つの素数によって形成される区間を直接列挙できます。
  2. 素数の決定に関しては、偶数の素数は1つ、つまり2しかなく、奇数の最小の素数は3です。
		// 判断是否为质数
		for(int j=2;j<sqrt(next)+1;j++)
			if(next%j==0){
    
    
				t=0;
				break;
			}
  1. 既知の条件によれば、m> = 1なので、直接3から始めて素数を探し(2より大きい偶数は合成数であるため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