본문 바로가기

백준

[백준] 13172 Σ [자바]

 


https://latte-is-horse.tistory.com/9

 

[RSA] 페르마의 작은 정리와 오일러 정리

※ 본 게시글은 모듈러 연산에 대해서 알고 있다는 전제하에 진행한다. 페르마의 작은 정리 (Fermat's little theorem) 페르마의 작은 정리에서 암호기술에 많이 응용되는 분야는 유한체에서의 역원 계

latte-is-horse.tistory.com

 

https://blog.yjyoon.dev/boj/2021/11/23/boj-13172/

 

[BOJ] 백준 13172번 Σ 풀이

백준 온라인 저지 13172번 - Σ C++ 풀이

blog.yjyoon.dev

 

 

※. 모듈러 연산 : a mod b = c -> 나머지를 구하는 연산

(26 mod 5 36 mod 5)

 

※. 모듈러 역원 : 어떤 정수 p에 대해 (p * q) mod n ≡ 1

 

※ 페르마의 소정리(a,p는 서로소)

 

페르마의 소정리 역원

 

임의의 소수 X에 대한 b의 모듈러 곱셈에 대한 역원은 b^(X-2)이다.

 

※. 문제에 X는 1,000,000,007이므로 b^(1,000,000,007 - 2)를 구해야한다.

 

https://rujang.tistory.com/entry/%EB%B0%B1%EC%A4%80-1629%EB%B2%88-%EA%B3%B1%EC%85%88-CC

 

[백준] 1629번 : 곱셈 [C/C++]

#문제 1629번: 곱셈 https://www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net #접근방법 일반적

rujang.tistory.com

https://tu-tr.tistory.com/160

 

[백준] 10830 행렬 제곱 [자바]

https://st-lab.tistory.com/251 [백준] 10830번 : 행렬 제곱 - JAVA [자바] https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수

tu-tr.tistory.com

※. N,S를 gcd(s,n)으로 나누어주어 기약분수로 만든다.

  그 후 S * N^(X-2) mod X 를 ans에 더해준다.

 


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {
	static StringBuilder sb = new StringBuilder();
	static long MOD = 1_000_000_007L;
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		//StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		int M = Integer.parseInt(br.readLine());
		long ans = 0;
		for(int i = 0; i < M; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			int N = Integer.parseInt(st.nextToken());
			int S = Integer.parseInt(st.nextToken());
			int g = gcd(Math.max(N, S), Math.min(N, S));
			N /= g;
			S /= g;
			ans += S * f(N,MOD-2) % MOD;
			ans %= MOD;
		}
		System.out.println(ans);
	}
	static int gcd(int a, int b) {
		if(b == 0)
			return a;
		return gcd(b, a%b);
	}
	static long f(long b, long n) {
		if(n == 1) return b;
		long p = f(b,n/2);
		long ret = p*p%MOD;
		if(n%2 == 1) {
			ret = ret*b%MOD;
		}
		return ret;
	}
}

'백준' 카테고리의 다른 글

[백준] 27963 합금 주화 [자바]  (0) 2023.04.20
[백준] 2437 저울 [자바]  (0) 2023.03.13
[백준] 15663 N과 M(9) [자바]  (0) 2023.03.04
[백준] 2225 합분해 [자바]  (0) 2023.03.03
[백준] 26607 시로코와 은행털기 [자바]  (0) 2023.01.29