백준/BRONZE
[백준 15829번][C++] Hashing
퍼펙트코딩
2022. 8. 6. 23:24
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
반응형