== 소ê°2 == * 통과O * 곰곰히 관찰해본 ê²°ê³¼ 소수 3ê°œì˜ í•©ìœ¼ë¡œ 웬만한 수를 다 만들 수 있다는 ê²ƒì„ ì•Œì•˜ë‹¤.(ëª¨ë“ ìˆ˜ë¥¼ 만들수 있는지는 ëª¨ë¥´ê² ë‹¤) 그래서 ì¼ë‹¨ ì œì¼ í° ì†Œìˆ˜ë¥¼ 하나 êµ¬í•˜ê³ ë‚˜ë¨¸ì§€ ê°’ì„ ì†Œìˆ˜ 3ê°œì˜ í•©ìœ¼ë¡œ 나타내었다. * impossibleê³¼ Impossible. ì€ ë‹¤ë¥¸ê±°ë‹¤. == 소스2 == {{{~cpp //10168 #include <iostream> #include <cmath> #include <ctime> using namespace std; #define PRIME_TABLE_SIZE 100 int primeTable[PRIME_TABLE_SIZE]; int primeCnt = 0; void makePrimeTable() { int i, j; primeTable[primeCnt++] = 2; for (i = 3; primeCnt < PRIME_TABLE_SIZE; i += 2) { for (j = 0; j < primeCnt; j++) { if (i % primeTable[j] == 0) break; else if (i / primeTable[j] <= primeTable[j]) { primeTable[primeCnt++] = i; break; } } } } bool isPrime(int n) { int i; if (n != 2 && n % 2 == 0) return false; for (i = 3; i <= sqrt(n); i += 2) { if (n % i == 0) return false; } return true; } int main() { int input; int sumOfThreePrimes; int primes[4] = {0}; int i, j, k; makePrimeTable(); while (cin >> input) { primes[0] = primes[1] = primes[2] = primes[3] = 0; for (i = input - 6; i >= 2; i--) { if (isPrime(i)) { primes[0] = i; sumOfThreePrimes = input - i; break; } } if (primes[0] == 0) { cout << "Impossible." << endl; continue; } for (i = 0; i < 100; i++) for (j = 0; j < 100; j++) for (k = 0; k < 100; k++) { if (sumOfThreePrimes == primeTable[i] + primeTable[j] + primeTable[k]) { primes[1] = primeTable[i]; primes[2] = primeTable[j]; primes[3] = primeTable[k]; i = j = k = 100; } } cout << primes[0] << " " << primes[1] << " " << primes[2] << " " << primes[3] << endl; } return 0; } }}} == 소ê°1 == 통과X ì ‘ê·¼ë°©ë²•ì´ ë‹¬ë¼ì•¼í•œë‹¤. ë‚´ê³µì´ ì•„ì§ ë¶€ì¡±í•œê²ƒ 같다. == 소스1 == {{{~cpp #include <iostream> #include <cmath> using namespace std; bool is_prime(int n); void sum_4prime(int n); int prime[500000]; int prime_cnt = 0; void main() { int input; cin >> input; sum_4prime(input); } bool is_prime(int n) { for (int i = 2; i <= sqrt(n); i++) if (n % i == 0) return false; return true; } void sum_4prime(int n) { int i, j, k, l; for (i = 2; i <= n; i++) { if (is_prime(i)) { prime[prime_cnt++] = i; //cout << i << endl; } } for (i = 0; i < prime_cnt; i++) { //if (prime[i] + prime[prime_cnt - 1] * 3 < n) // continue; for (j = 0; j < prime_cnt; j++) { //if (prime[i] + prime[j] >= n) // break; //if (prime[i] + prime[j] + prime[prime_cnt - 1] * 2 < n) // continue; for (k = 0; k < prime_cnt; k++) { //if (prime[i] + prime[j] + prime[k] >= n) // break; //if (prime[i] + prime[j] + prime[k] + prime[prime_cnt - 1] < n) // continue; for (l = 0; l < prime_cnt; l++) { //if (prime[i] + prime[j] + prime[k] + prime[l] > n) // break; if (prime[i] + prime[j] + prime[k] + prime[l] == n) { cout << prime[i] << " " << prime[j] << " " << prime[k] << " " << prime[l] << endl; return; } } } } } cout << "Impossible" << endl; } }}} == 댓글 == ---- [SummationOfFourPrimes]