[C++]伯俊9020号黄金バッハの推測
8172 ワード
質問する
1より大きい自然数のうち、1と自身を除いて約数のない自然数を少数と呼ぶ.例えば、5は、1と5を除いて約数がないため、少数である.ただし、6=6=2× 3なので少数ではありません.
金バッハの推測は有名な整数論の未解問題であり,2より大きいすべての偶数は2つの素数の和として表すことができる.この数を金バッハ数と呼ぶ.また,偶数を2素数の和として表す式を数の黄金バッハパーティションと呼ぶ.例えば、4=2+2、6=3+3、8=3+5、10=5+5、12=5+7、14=3+11、14=7+7である.10000以下のすべての偶数nについて、黄金バッハパーティションが存在する.
2より大きい偶数nが与えられた場合、nの黄金バッハパーティションを出力するプログラムを作成します.可能なn個のゴールドバッハパーティションが複数ある場合、出力の2つの少数の差が最小である.
入力
第1行は、試験例の個数Tを与える.各試験例は1行で構成され、偶数nが与えられる.
しゅつりょく
各テストケースについて、所与のn個のゴールドバッハパーティションを出力する.出力された小数点は先に出力され、スペースで区切られます.
制限
4 ≤ n ≤ 10,000
に答える
エラトネスのふるいを用いて,まず4~10000の範囲の小数を求め,prime配列に格納する.
2つの小数の差は最小にしなければならないので、入力値の半分によって-1+1を繰り返し、両方が小数であれば大丈夫です.
1より大きい自然数のうち、1と自身を除いて約数のない自然数を少数と呼ぶ.例えば、5は、1と5を除いて約数がないため、少数である.ただし、6=6=2× 3なので少数ではありません.
金バッハの推測は有名な整数論の未解問題であり,2より大きいすべての偶数は2つの素数の和として表すことができる.この数を金バッハ数と呼ぶ.また,偶数を2素数の和として表す式を数の黄金バッハパーティションと呼ぶ.例えば、4=2+2、6=3+3、8=3+5、10=5+5、12=5+7、14=3+11、14=7+7である.10000以下のすべての偶数nについて、黄金バッハパーティションが存在する.
2より大きい偶数nが与えられた場合、nの黄金バッハパーティションを出力するプログラムを作成します.可能なn個のゴールドバッハパーティションが複数ある場合、出力の2つの少数の差が最小である.
入力
第1行は、試験例の個数Tを与える.各試験例は1行で構成され、偶数nが与えられる.
しゅつりょく
各テストケースについて、所与のn個のゴールドバッハパーティションを出力する.出力された小数点は先に出力され、スペースで区切られます.
制限
4 ≤ n ≤ 10,000
に答える
エラトネスのふるいを用いて,まず4~10000の範囲の小数を求め,prime配列に格納する.
2つの小数の差は最小にしなければならないので、入力値の半分によって-1+1を繰り返し、両方が小数であれば大丈夫です.
#include <iostream>
#include <vector>
#include <cstring>
#include <fstream>
#include <algorithm>
#include <cmath>
#define endl '\n'
using namespace std;
int n;
int prime[10000];
void eratos(){
for (int i=2; i<10000; i++)
prime[i] = 1;
for (int i=2; i<=100; i++)
if (prime[i])
for (int j=i*i; j<10000; j+=i)
prime[j] = 0;
}
int solve(int num){
for (int x = num/2; x>0; x--)
if (prime[x] && prime[num-x])
return x;
}
int main(){
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// ifstream cin;
// cin.open("input.txt");
cin >> n;
eratos();
for (int i=0; i<n; i++){
int num;
cin >> num;
int x = solve(num);
int y = num - x;
cout << x << " " << y << endl;
}
}
Reference
この問題について([C++]伯俊9020号黄金バッハの推測), 我々は、より多くの情報をここで見つけました https://velog.io/@lacram/C-백준-9020번-골드바흐의-추측テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol