λͺ©λ‘μœΌλ‘œ
λ°±μ€€

BOJ - [Basic Algebra - 2581 μ†Œμˆ˜] - Silver V πŸ₯ˆ

https://www.acmicpc.net/problem/2581 이 λ¬Έμ œλŠ” μ–΄λŠμ •λ„ μˆ˜ν•™μ  지식을 κ°€μ§€κ³  μžˆλ‹€λ©΄ μ ‘κ·Όν•˜κΈ° 더 μˆ˜μ›”ν•΄μ§„λ‹€. μ†Œμˆ˜λ₯Ό κ΅¬λ³„ν•˜λŠ” λ°©λ²•μ—λŠ” μ—¬λŸ¬κ°€μ§€κ°€ μžˆλŠ”λ° 특히 νŠΉμ • λ²”μœ„λ‚΄μ˜ μ†Œμˆ˜λ₯Ό κ΅¬λ³„ν•˜λŠ”λ°μ—λŠ” [μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체] λ₯Ό μ΄μš©ν•˜λ©΄ 더 μˆ˜μ›”ν•˜κ²Œ ν’€ 수 있...

1λΆ„ 읽기

문제

https://www.acmicpc.net/problem/2581

μ„€λͺ…

이 λ¬Έμ œλŠ” μ–΄λŠμ •λ„ μˆ˜ν•™μ  지식을 κ°€μ§€κ³  μžˆλ‹€λ©΄ μ ‘κ·Όν•˜κΈ° 더 μˆ˜μ›”ν•΄μ§„λ‹€. μ†Œμˆ˜λ₯Ό κ΅¬λ³„ν•˜λŠ” λ°©λ²•μ—λŠ” μ—¬λŸ¬κ°€μ§€κ°€ μžˆλŠ”λ° 특히 νŠΉμ • λ²”μœ„λ‚΄μ˜ μ†Œμˆ˜λ₯Ό κ΅¬λ³„ν•˜λŠ”λ°μ—λŠ” [μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체] λ₯Ό μ΄μš©ν•˜λ©΄ 더 μˆ˜μ›”ν•˜κ²Œ ν’€ 수 μžˆλ‹€.λ¨Όμ € μ‚¬μš©μžκ°€ μž…λ ₯될 수 μžˆλŠ” 값은 아무리 컀봐야 10000 을 λ„˜μ§€ μ•ŠκΈ° 떄문에 λ°°μ—΄ 크기 λ₯Ό 10001 둜 μ„€μ •ν•œλ‹€. 그리고 for문을 μ΄μš©ν•˜μ—¬ λͺ¨λ‘ 0 으둜 μ΄ˆκΈ°ν™” μ‹œν‚¨λ‹€. 그리고 쀑첩 for문을 μ΄μš©ν•˜μ—¬ μ†Œμˆ˜κ°€ μ•„λ‹Œ 것듀에 ν•΄λ‹Ήν•˜λŠ” 배열을 0 μ—μ„œ 1 둜 바꾸도둝 ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ μ†Œμˆ˜μ— ν•΄λ‹Ήν•˜λŠ” λ°°μ—΄λ§Œμ΄ 0 으둜 λ‚¨μ•„μžˆλ„λ‘ ν•œλ‹€. 그리고 λ§ˆμ§€λ§‰μœΌλ‘œ ν•΄λ‹Ή 배열이 0 인지 1 인지 forλ¬Έκ³Ό if문을 μ΄μš©ν•˜μ—¬ νŒλ…ν•˜μ—¬ ν•΄λ‹Ή λ²”μœ„λ‚΄μ˜ 총합과 μ†Œμˆ˜μ˜ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λ„λ‘ ν•˜μ˜€λ‹€. loop_end λΌλŠ” λ³€μˆ˜μ—λŠ” μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ²”μœ„μ˜ 끝뢀뢄(end λ³€μˆ˜)의 제곱근 값을 λ„£μŒμœΌλ‘œμ¨ 쀑첩 for문을 톡해 μ†Œμˆ˜λ₯Ό κ±ΈλŸ¬λ‚Όλ•Œ ν•„μš”ν•œ μƒν•œμ„ μ„ μ„€μ •ν•˜μ˜€λ‹€. ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λŠ”λ°μ— μˆ˜ν•™μ΄ μ ˆλŒ€ ν•„μš” μ—†λŠ” 것이 μ•„λ‹˜μ„ λ³΄μ—¬μ£ΌλŠ” λ¬Έμ œμ˜€λ‹€. (였늘 ν‘Ό λ‹¬νŒ½μ΄ λ¬Έμ œλ„ λ‚œ μž‘λ…„ 수λŠ₯ μ€€λΉ„ν•˜λ©΄μ„œ ν™•λ₯ κ³Ό ν†΅κ³„μ˜ μˆ˜μ—΄ λ‹¨μœ„μ—μ„œ 배운 'κ΅°'을 μ΄μš©ν•˜μ—¬ ν’€μ—ˆμœΌλ‹ˆ ν”„λ‘œκ·Έλž˜λ°μ— μˆ˜ν•™μ€ κΌ­ ν•„μš”ν•΄λ³΄μΈλ‹€.)

[μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체] : https://namu.wiki/w/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98%20%EC%B2%B4

μ½”λ“œ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
	int start=0, end=0,first=0,tot=0;
	scanf("%d", &start);
	scanf("%d", &end);
	int arr[10001];
	for (int l = start-1; l <= end; l++)
		arr[l] = 0;
	arr[0] = 1;
	int loop_end = sqrt(end);
	for (int i = 2; i <= loop_end; i++)
		for (int j = 2; i * j <= end; j++)
			arr[(i * j) - 1] = 1;
	for (int a = start; a < end+1; a++)
		if (arr[a - 1] == 0)
		{
			tot += a;
			if (first == 0)
				first = a;
		}
	if (tot == 0 && first == 0)
		printf("-1");
	else
		printf("%d\n%d", tot, first);
			
	return 0;
}

λŒ“κΈ€