(A + B) % M == (A % M + B % M) % M
(A x B) % M == (A % M x B % M) % M
(A - B) % M == (A % M - B % M + M) % M
(A / B) % M != (A % M / B % M) % M
숫자마다 매번 나눠 주는 이유는 정답이 int나 long과 같은 자료형의 범위를 넘어가기 때문이다.
문제 : https://www.acmicpc.net/problem/4375
2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오.
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다.
1로 이루어진 n의 배수 중 가장 작은 수의 자리수를 출력한다.
1%7=1
11%7=4
111%7=6
1111%7=5
11111%7=2
111111%7=0
일때
111111을 바로 나누는 것은 수가 너무 크기때문에 자료형의 범위를 넘어간다.
아까의 숫자를 매번 나눠주는 방식을 사용하면 풀수있다.
1%7=1
-> 11 % 7 =(1× 10+1)%7=(1%7× 10+1)%7=(1× 10+1)%7=4
-> 111%7=(11× 10+1)%7=(11%7× 10+1)%7=(4× 10+1)%7=6
....
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int n = sc.nextInt();
int num = 0;
for (int i=1;; i++) {
num = num*10+1;
num %= n;
if (num == 0) {
System.out.println(i);
break;
}
}
}
}
}