POJ2262
1365 ワード
テーマLINK
題意解釈
2つの質量数を探して、彼らは与えられた1つの数に等しく加算して、同時にこの2つの数の差が最大であることを保証します.(題意がよく理解されている)この問題の重点は時間制限にあり,質数を判定する際には最も簡単な方法ではなく,質数フィルタリング法を用いるべきである.同時に表を打った後、別の質量数を探すときは二分法を使って探したほうがいいです.結果はACになります.
収穫する
コードテクニック lower_bound()これはalgorithmのヘッダファイルで、とても使いやすく、二分法で検索します. 初期化の時、defineで来たほうがいいです.私は9を少なくして午前中の間違いを調べました. ACコード
題意解釈
2つの質量数を探して、彼らは与えられた1つの数に等しく加算して、同時にこの2つの数の差が最大であることを保証します.(題意がよく理解されている)この問題の重点は時間制限にあり,質数を判定する際には最も簡単な方法ではなく,質数フィルタリング法を用いるべきである.同時に表を打った後、別の質量数を探すときは二分法を使って探したほうがいいです.結果はACになります.
収穫する
コードテクニック
#include
#include
#include
using namespace std;
#define MAXN 1000010
#define ll long long
int Prime[MAXN];
bool NotPrime[MAXN];
int prime_total;
void generate_prime(int n){
//prime_total = 0;
for(ll i = 2; i <= n; i++){
if(!NotPrime[i]){
Prime[prime_total++] = i;
for(ll j = i*i; j <=n; j+=i){
NotPrime[j]=true;
}
}
}
}
void solve(int number){
for(int i = 0; i < prime_total;i++){
int a = Prime[i];
int b = *lower_bound(Prime,Prime+prime_total,number-a);
if(a+b==number){
cout << number << " = " << a << " + " << b << endl;
break;
}
}
return ;
}
int main()
{
int num;
generate_prime(999999);
cin >> num;
while(num != 0){
solve(num);
cin >> num;
}
return 0;
}