728x90
반응형
{모듈러 속성}
(a + b) mod n = ((a mod n) + (b mod n)) mod n
(a - b) mod n = ((a mod n) - (b mod n)) mod n
(a * b) mod n = ((a mod n) * (b mod n)) mod n
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
long long hashNum = 0;
//알파벳 길이수
int len;
cin >> len;
//문장 받음
string str;
cin >> str;
//각 문자에 해당하는 수열 저장
vector<int> nums;
for (int i = 0;i < len; i++) {
nums.push_back(str[i] - 'a' + 1);
}
long long R = 1;
for(int i=0;i<len;i++){
//R값과 nums 값 곱하고 나머지를 hashNum에 더해줌
hashNum = hashNum + (nums[i] * R) % 1234567891;
//한번 더 나누어 준다
hashNum %= 1234567891;
//R값 31다시 곱해준다
R = R * 31;
//1234567891로 나누어준다
R %= 1234567891;
}
cout << hashNum%1234567891;
}728x90
반응형
'백준 > BRONZE' 카테고리의 다른 글
| [백준 10807번][C++] 개수 세기 (0) | 2022.08.30 |
|---|---|
| [백준 2455번][C++] 지능형 기차 (0) | 2022.08.29 |
| [백준 16503번][C++] 괄호 없는 사칙연산 (0) | 2022.08.21 |
| [백준 2010번][C++] 플러그 (0) | 2022.07.16 |
| [백준 2609번][C++] 최대 공약수와 최소 공배수 (0) | 2022.07.16 |