12개의 댓글이 있습니다.
-
-
일루 -
엄청나게 쉬운 문제는 아닙니다.
'count gcd 1' 을 검색하면 나오는
http://math.stackexchange.com/questions/108483/number-of-pairs-a-b-with-gcda-b-1
링크 등을 참조해보세요.
totient function을 쓰는 방법과 Möbius function을 쓰는 두 가지 방법이 있습니다. 전 주로 후자를 사용합니다만...
10년 전 link
-
-
-
infoefficiency -
으.... 알고싶은데 너무 어렵네요 ㅠㅠ
10년 전 link
-
-
-
Jaekwan -
ㅠ_ㅠ 제가 할 수 있는 최선의 코드를 잤는데 시간이 오버가 되는군요..
이곳에 최적화 가능성이 있을까요??
// 유클리드 gcd를 역으로 타서 // p = q+p로 재귀를 돌렸어요. 무조건 1인 것만 찾고 점프 하도록.. // 결과값은 제대로 나오는데, 시간이 문제네요.. <spoil> #include<iostream> #include<string> using namespace std; int total(int a, int b, int left, int right) { if (left > a || right >b){ return 1; } return total(a,b,left+right,right) + total(a,b,left, left+right) ; } int main() { int t; int a,b; int ans; cin>>t; while(t--) { cin>>a>>b; ans = total(a,b,1,1) -1; cout<<ans<<endl; } }
10년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
Jaekwan
어떤 한 문제에 골머리를 썩고 있네요. 쉬운것 같기도 하면서 너무 어렵습니다.
두 숫자가 주어졌을때 그 숫자 아래로 모든 숫자 조합 중 GCD가 1인 경우를 찾고 있습니다.
가령,
3, 2가 주어졌다면 답은 5가 됩니다.
(1,1) - GCD = 1
(2,1) - GCD = 1
(1,2) - GCD = 1
(3,1) - GCD = 1
(3,2) - GCD = 1
그런데 두 수 A와 B의 제한이
1<=A<=100000
1<=B<=100000
이기 때문에 모든 조합을 구하려고 하면 자꾸 제동이 걸리네요..
O(NM)을 깨야 하는데 쉽지가 않네요..
10년 전