티스토리 뷰

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;

}





댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크