λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’»Study/Java

[μ•Œκ³ λ¦¬μ¦˜] μ†Œμˆ˜ κ΅¬ν•˜κΈ°(1)

μžμ—°μˆ˜(=μ–‘μ˜ μ •μˆ˜)λŠ” μ„Έ κ°€μ§€λ‘œ λ‚˜λˆ„μ–΄ μ§‘λ‹ˆλ‹€.

1, μ†Œμˆ˜, 그리고 ν•©μ„±μˆ˜μž…λ‹ˆλ‹€.

μ†Œμˆ˜λž€, 1κ³Ό 자기 μžμ‹ μ„ μ œμ™Έν•œ μ–΄λ–€ μ •μˆ˜λ‘œλ„ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€μ§€ μ•ŠλŠ” μ •μˆ˜λ₯Ό λœ»ν•©λ‹ˆλ‹€. 1κ³Ό μ†Œμˆ˜λ₯Ό μ œμ™Έν•œ λͺ¨λ“  μžμ—°μˆ˜λŠ” ν•©μ„±μˆ˜μ— μ†ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 7의 μ•½μˆ˜λŠ” 1κ³Ό 7 λΏμ΄λ―€λ‘œ μ†Œμˆ˜μ΄κ³ , 6의 μ•½μˆ˜λŠ” 1, 2, 3, 6μ΄λ―€λ‘œ ν•©μ„±μˆ˜μž…λ‹ˆλ‹€. μ–΄λ–€ μžμ—°μˆ˜κ°€ μ†Œμˆ˜μΈμ§€ μ•„λ‹Œμ§€ νŒλ³„ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν•΄λ‹Ή 숫자의 μ•½μˆ˜λ₯Ό 생각해 보면 λœλ‹€λŠ” λœ»μž…λ‹ˆλ‹€. μ•½μˆ˜μ˜ κ°œλ…μ€ μ΄ˆλ“±ν•™κ΅ λ•Œ 처음 λ°°μ›Œ 계속 써먹기 λ•Œλ¬Έμ— λ¨Έλ¦¬λ‘œλŠ” 금방 νŒλ‹¨ν•  수 μžˆμ§€λ§Œ μˆ˜κ°€ 쑰금만 컀지면 νž˜λ“€μ–΄μ§‘λ‹ˆλ‹€. 2, 3, 5, 7, 11, 13...κΉŒμ§€λŠ” κΈˆλ°©μ΄μ§€λ§Œ, 479κ°€ μ†Œμˆ˜μΈμ§€ νŒλ‹¨ν•˜λ €λ©΄ μ–΄λ–¨κΉŒμš”? 이λ₯Ό νŒλ‹¨ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•Œκ³ λ¦¬μ¦˜μ„ 생각해 봐야 ν•©λ‹ˆλ‹€.

 

<μžμ—°μˆ˜ n이 μ†Œμˆ˜μΈμ§€ νŒλ³„ν•˜λŠ” 방법>

2 이상 n-1 μ΄ν•˜μ˜ λͺ¨λ“  μ •μˆ˜λ‘œ λ‚˜λˆ„μ—ˆμ„ λ•Œ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€μ§€ μ•ŠλŠ”λ‹€.

이λ₯Ό λ°”νƒ•μœΌλ‘œ μžλ°”μ—μ„œ μ†Œμˆ˜λ₯Ό λ‚˜μ—΄ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

	public static void main(String[] args) {
		int cnt = 0; //λ‚˜λˆ—μ…ˆ 횟수
		int i;
		
		for(int n=2; n<=500; n++) {
        //2 이상 500 μ΄ν•˜μ˜ μ†Œμˆ˜λ₯Ό λ‚˜μ—΄ν•  것
			for(i=2; i<n; i++) {
				cnt++; //λ‚˜λˆ—μ…ˆ ν•  λ•Œλ§ˆλ‹€ +1
				if(n%i == 0) { //ν•΄λ‹Ή 수λ₯Ό i둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€κ°€ 0이면 μ†Œμˆ˜κ°€ μ•„λ‹ˆλ‹€
					break; 
                    //반볡문 μ’…λ£Œν•˜κ³  λ°”κΉ₯μͺ½ 반볡문으둜 κ°€μ„œ n++ μˆ˜ν–‰. 
                    //ν•΄λ‹Ή μˆ«μžλŠ” μ†Œμˆ˜κ°€ μ•„λ‹ˆκ³  κ·Έ λ‹€μŒ 숫자 νŒλ‹¨ μ‹œμž‘.
				}
			}
			if(n == i) { 
            //μ•ˆμͺ½ 반볡문이 μ’…λ£Œλ˜μ§€ μ•Šκ³  ν•΄λ‹Ή ν–‰κΉŒμ§€ μ™€μ„œ n==iκ°€ 되면 μ†Œμˆ˜λΌλŠ” 뜻
				System.out.println(n);
			}
		}
		System.out.println("λ‚˜λˆ—μ…ˆ 횟수 : " + cnt);
	}

 

<μ‹€ν–‰ κ²°κ³Ό>

2
3
5
7
...(μ€‘λž΅)...
491
499
λ‚˜λˆ—μ…ˆ 횟수 : 22279

 

이해λ₯Ό 돕기 μœ„ν•΄ μ˜ˆμ‹œλ₯Ό 톡해 μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. 6이 μ†Œμˆ˜μΈμ§€ μ•Œμ•„λ³΄κΈ° μœ„ν•΄μ„œ μˆ˜ν–‰ν•˜λŠ” λ‚˜λˆ—μ…ˆμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

6%2 
6%3
6%4
6%5

ν•˜μ§€λ§Œ μ‹€μ œλ‘œ 이 계산을 μ „λΆ€ μˆ˜ν–‰ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. 6%2==0이기 λ•Œλ¬Έμ— λ‚˜λˆ—μ…ˆμ€ μ¦‰μ‹œ μ’…λ£Œλ©λ‹ˆλ‹€. n%i==0이 되면 break문을 톡해 λ°˜λ³΅λ¬Έμ€ μ’…λ£Œλ˜κ³ , ν•΄λ‹Ή μˆ˜λŠ” μ†Œμˆ˜κ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 좜λ ₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

7이 μ†Œμˆ˜μΈμ§€ νŒλ³„ν•˜λŠ” λ‚˜λˆ—μ…ˆμ„ λ‚˜μ—΄ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

7%2
7%3
7%4
7%5
7%6

ν•΄λ‹Ή μ—°μ‚° 쀑에 결과값이 0이 λ˜λŠ” κ²½μš°λŠ” λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 말해, n%i==0κ°€ μ„±λ¦½ν•˜λŠ” κ²½μš°λŠ” μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ break문을 λ§Œλ‚˜μ§€ μ•Šκ³  κ·Έ λ‹€μŒ if문으둜 λ„˜μ–΄κ°€μ„œ, n==iκ°€ μ„±λ¦½ν•˜κΈ° λ•Œλ¬Έμ— n값인 7을 좜λ ₯ν•˜κ²Œ λ©λ‹ˆλ‹€. 즉, 7은 μ†Œμˆ˜μž…λ‹ˆλ‹€.

 

n값을 500κΉŒμ§€ μ‹œν–‰ν•˜κ²Œ 되면 λ‚˜λˆ—μ…ˆ νšŸμˆ˜λŠ” 총 22279번이 λ©λ‹ˆλ‹€. μ‚¬λžŒμ΄ μ € λ‚˜λˆ—μ…ˆμ„ μ†μœΌλ‘œ ν•˜λ©΄ ν•˜λ£¨λŠ” 쑱히 κ±Έλ¦¬κ² λ„€μš”. ν•˜μ§€λ§Œ μ»΄ν“¨ν„°λŠ” μˆœμ‹κ°„μ— 연산이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 느린 μ €μ˜ λ…ΈνŠΈλΆλ„ 금방 연산을 ν•΄λ‚΄λ„€μš”.

ν•˜μ§€λ§Œ μ„±λŠ₯이 쒋은 연산이라고 λ³΄κΈ°λŠ” μ–΄λ ΅μŠ΅λ‹ˆλ‹€. 이왕이면 같은 μ‹œκ°„μ— 더 λ§Žμ€ 일을 ν•΄λ‚΄λŠ” 것이 효율이 μ’‹μœΌλ‹ˆκΉŒμš”. 

 

μ–΄λ–»κ²Œ ν•˜λ©΄ μ„±λŠ₯을 κ°œμ„ ν•  수 μžˆμ„κΉŒμš”? λ‹€μ‹œ ν•œ 번 7을 μ˜ˆμ‹œλ‘œ μ‚Όμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

7이 2둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€μ§€ μ•ŠλŠ”λ‹€λ©΄, 2의 배수인 4와 6μœΌλ‘œλ„ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 쑰금만 생각해 보면 λ‹Ήμ—°ν•œ λ§μ΄λΌλŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μ‹œ 말해,

7%2
7%3
7%4
7%5
7%6


7%4와 7%6은 ν•„μš”μ—†λŠ” μ—°μ‚°μž…λ‹ˆλ‹€. λͺ¨λ“  μžμ—°μˆ˜μ— λŒ€ν•΄μ„œ μ΄λŸ¬ν•œ λΆˆν•„μš”ν•œ 연산을 쀄이면 μ„±λŠ₯이 κ°œμ„ λ  κ²ƒμž…λ‹ˆλ‹€. λͺ¨λ“  μžμ—°μˆ˜λ‘œ λ‚˜λˆŒ ν•„μš”κ°€ μ—†κ³ , μ†Œμˆ˜λ‘œ λ‚˜λˆ„μ—ˆμ„ λ•Œ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€μ§€λ§Œ μ•ŠλŠ”λ‹€λ©΄ μ†Œμˆ˜μ˜ 배수인 ν•©μ„±μˆ˜λ‘œ λ‚˜λˆ„μ—ˆμ„ λ•Œλ„ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€μ§€ μ•Šμ„ κ²ƒμž„μ΄ 자λͺ…ν•©λ‹ˆλ‹€.

 

κ²°λ‘ μž…λ‹ˆλ‹€.

 

<μžμ—°μˆ˜ n이 μ†Œμˆ˜μΈμ§€ νŒλ³„ν•˜λŠ” 방법>

2 이상 n-1 μ΄ν•˜μ˜ λͺ¨λ“  μ†Œμˆ˜λ‘œ λ‚˜λˆ„μ—ˆμ„ λ•Œ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€μ§€ μ•ŠλŠ”λ‹€.

 

κ°œμ„ λœ μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μŒ ν¬μŠ€νŒ…μ— 계속 μ΄μ–΄μ„œ μ„€λͺ…ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

더보기

처음 μ†Œμˆ˜ κ΅¬ν•˜κΈ°λ₯Ό 배울 λ•ŒλŠ” 혼자 μ½”λ“œλ₯Ό μ§œλ³΄λ‹€κ°€ 잘 μ•ˆ λΌμ„œ μ”©μ”© κ±°λ¦¬λ©΄μ„œ ꡬ글링 ν•΄λ³΄λ˜ 기얡이 λ‚˜λŠ”λ°, μ§€κΈˆ λ‹€μ‹œ λ³΄λ‹ˆ λ³„λ‘œ μ–΄λ ΅μ§€ μ•Šλ„€μš”.

μ—­μ‹œ 무언가λ₯Ό μŠ΅λ“ν•  λ•ŒλŠ” 지식 μˆ™μ„±μ˜ μ‹œκ°„μ΄ ν•„μš”ν•˜λ‹€λŠ” 것을 λ‹€μ‹œ ν•œ 번 λŠλ‚λ‹ˆλ‹€. 반볡만이 μ‚΄ κΈΈ!

 


Do it! μžλ£Œκ΅¬μ‘°μ™€ ν•¨κ»˜ λ°°μš°λŠ” μ•Œκ³ λ¦¬μ¦˜ μž…λ¬Έ μžλ°” νŽΈμ„ 읽고 μ •λ¦¬ν•œ κ²Œμ‹œκΈ€μž…λ‹ˆλ‹€.

μ±…μ˜ κ°œλ…μ„ λ°”νƒ•μœΌλ‘œ μ €μ˜ 생각을 μΆ”κ°€ν•˜μ—¬ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.