long long 자료형의 mod 연산 비용 Neon SRM 554를 연습하다가 멘붕해서 남깁니다. #include <iostream> #include <cstdlib> using namespace std; long long mod = 1200000000LL; long long mod2 = mod * mod; int main(void) { long long ret = 0; for(int i=0;i<100000000;i++) { int tmp1 = rand() % mod; int tmp2 = rand() % mod; ret += (long long)tmp1 * tmp2; ret %= mod; } cout << ret << endl; } 이거랑 #include <iostream> #include <cstdlib> using namespace std; long long mod = 1200000000LL; long long mod2 = mod * mod; int main(void) { long long ret = 0; for(int i=0;i<100000000;i++) { int tmp1 = rand() % mod; int tmp2 = rand() % mod; ret += (long long)tmp1 * tmp2; if(ret >= mod2) ret -= mod2; } ret %= mod; cout << ret << endl; } 이거의 속도를 비교해보면(srand를 쓰지 않았으니 결과는 두 코드 모두 동일) 1번 타자 : 4.996s 2번 타자 : 3.645s 실제 SRM 연습에선 이 차이가 더 극명하게 나와서, 위 방법으로 matrix multiplication을 하면 2초 TLE가 나던 코드가, 아래 방법으로 최적화를 거치니까 0.5초로 결과가 나오더라능... 생각보다 mod 연산의 비용이 엄청 크다는 걸 알았습니다 OTL 12년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
Neon
SRM 554를 연습하다가 멘붕해서 남깁니다.
이거랑
이거의 속도를 비교해보면(srand를 쓰지 않았으니 결과는 두 코드 모두 동일)
1번 타자 : 4.996s
2번 타자 : 3.645s
실제 SRM 연습에선 이 차이가 더 극명하게 나와서, 위 방법으로 matrix multiplication을 하면 2초 TLE가 나던 코드가, 아래 방법으로 최적화를 거치니까 0.5초로 결과가 나오더라능...
생각보다 mod 연산의 비용이 엄청 크다는 걸 알았습니다 OTL
12년 전