BOJ 26953 - 일차합동식
풀다 생각이 잘 안떠올랐는데 풀이도 없어 꽤나 곤란했던 문제
조금 느린 방법으로 풀 수 있었다.
아무리 생각해도 Phi 함수를 어떻게 쓸지 모르겠어서 그냥 포함 배제의 원리로 풀었다.
대략 풀이는 다음과 같다.
공통Permalink
이므로 이고 이 베주항등식의 해가 존재할 조건은 이다.
내 풀이 - 포함 배제의 원리Permalink
을 순회하며 의 약수 에 대해 살핀다.
인 의 개수를 세는 문제로 환원되고 이는 과 동일하다.
따라서 까지의 수 중 와 서로소인 것의 개수를 세면 되고
이걸 포함 배제의 원리로 직접 구해서 풀었더니 느린 풀이로 통과되었다.
풀이 1 - 오일러 피함수Permalink
위에서의 관찰을 기반으로 에 대해 순회하지말고 의 약수 에 대해 고려한다.
인 쌍 을 센다.
이걸 세는 방법으로 오일러 피함수를 이용하는 것이다.
이 된다.
까지의 모든 에 대해 를 보자. 결국 이 인 서로소인 쌍의 개수이다.
따라서 를 정답에 더해준다.
를 곱해준 이유는 의 순서가 바뀔 수 있기 때문이고, 을 해준 이유는 만 특별하게 로 동일한 수로 함수에서 세지기 때문이다.
마지막으로 정답에 을 해주는데 이고 일 땐 가 뭐든 항상 해가 존재하기 때문이다.
시간복잡도는 이다.
풀이 2 - 뫼비우스 함수Permalink
두 자연수 범위에서 서로소인 쌍의 개수를 세는건 나중에 블로그에 다시 정리하겠지만 뫼비우스함수를 이용해 푸는 대표적인 문제이다.
는 가 square free수면 이고 아니면 인 함수이다.
Comments