AOJ 0056 Goldbach's Conjecture

ゴールドバッハ予想 | Aizu Online Judge


i番目とn-i番目の数が素数なら二つの和がnになるのでカウント

#include <iostream>
#include <numeric>
using namespace std;

#define SIZE 50001

int main() {
	bool prime[SIZE];
	fill(prime, prime + SIZE, true);
	prime[0] = prime[1] = false;
	for (int i = 2; i * i < SIZE; i++) {
		for (int j = 2; j * i < SIZE; j++) {
			if (!prime[i * j]) continue;
			prime[i * j] = false;
		}
	}

	int n, count;
	while (cin >> n) {
		if (n == 0) break;

		count = 0;
		for (int i = 0; i <= n / 2; i++) {
			if (prime[i] && prime[n - i]) count++;
		}
		cout << count << endl;
	}
	return 0;
}

AOJ 0053 Sum of Prime Numbers

素数の和 | Aizu Online Judge


n個の素数を足すまでwhile文を回しただけ。

#include <iostream>
#include <numeric>
using namespace std;

int main() {
	bool prime[1000000];
	fill(prime, prime + 1000000, true);
	prime[0] = prime[1] = false;
	for (int i = 2; i * i < 1000000; i++) {
		for (int j = 2; j * i < 1000000; j++) {
			if (!prime[i * j]) continue;
			prime[i * j] = false;
		}
	}

	int n;
	while (cin >> n) {
		if (n == 0) break;

		int t = 0, sum = 0;
		while (n > 0) {
			if (!prime[++t]) continue;

			n--;
			sum += t;
		}
		cout << sum << endl;
	}
	return 0;
}

AOJ 0045 Sum and Average

合計と平均 | Aizu Online Judge


自分で四捨五入する関数書いたらエラー吐かれたのでしぶしぶstl使った...

#include <iostream>
#include <cmath>
using namespace std;

int main() {
	int n, w, sum = 0, i = 0;
	double ws = 0;
	char t;
	while (cin >> n) {
		cin >> t >> w;

		i++;
		sum += n * w;
		ws += w;
	}

	cout << sum << endl;
	cout << round(ws / i) << endl;

	return 0;
}

AOJ 0044 Prime Number II

最小の素数と最大の素数 | Aizu Online Judge


エラトステネスの篩で素数判定をした後に探索、愚鈍なコードを書いたと思う(numericインクルードしとけばfill仕えたのか...)

#include <iostream>
#include <numeric>
using namespace std;

int main() {
	bool prime[100000];
	fill(prime, prime + 100000, 1);
	prime[0] = prime[1] = false;
	for (int i = 2; i * i < 100000; i++) {
		for (int j = 2; i * j < 100000; j++) {
			if (!prime[i * j]) continue;
			prime[i * j] = false;
		}
	}

	int n;
	while (cin >> n) {
		int i = 0;
		for (int i = n - 1; i >= 0; i--) {
			if (prime[i]) {
				cout << i << " ";
				break;
			}
		}
		for (int i = n + 1; i < 100000; i++) {
			if (prime[i]) {
				cout << i << endl;
				break;
			}
		}
	}
	return 0;
}