티스토리 뷰
7월 5째주 과제 소수의 연속합
황상진
<embed src="https://www.acmicpc.net/problem/1644" width="700" height="300" allowscriptaccess="never">
가장먼저 소수의 연속합을 구하려면
소수를 구해야합니다.
소수는 primenumber라는 함수에서 구했습니다.
그후 2부터 하나씩 증가하면서 소수의 합을 구했습니다
그러나 이러한 과정에서 오류가 발생했습니다.
예를 들어, 소수합이 41인 경우
2 3 5 7 11
11 13 17
41
이렇게 3가지 경우가 있는데
제 코드에 의하면 8 9 10 11 모두 소수의 합이 41이 되는 오류가 있었습니다.
그래서 소수의 수를 카운트하는 변수를 만들어서
만약 소수의 변수들의 개수가 같으면 넘어가는 방법으로 문제를 해결했습니다
#include#pragma warning (disable : 4996) using namespace std; int primeNumber(int); int main() { int num, i, j, re; int count = 0; int sum; int numc1 = 0,numc2=0; scanf("%d", &num); for (j=2;j<=num;j++) { sum = 0; numc1 = 0; for (i = j; i <= num; i++) { re = primeNumber(i); if (re == 1) { sum += i; numc1++; if (sum == num) { if (numc2 != numc1) { numc2 = numc1; count++; printf("%5d\n", i); break; } } } else continue; } } printf("%d개 있습니다.", count); return 0; } int primeNumber(int number) { int i, res, ret; for (i = 2; i < number; i++) { res = number%i; if (res == 0) { return 0; } } return 1; }
댓글