Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <random>
- #include <vector>
- #include <bitset>
- #include <iostream>
- #define N 80000000
- typedef unsigned long long u64;
- typedef unsigned char u8;
- static u8 cut_row(u64 tile, u8 i) { return (tile >> (8u * i)) & 0xff; }
- static u8 cut_col(u64 tile, u8 col) {
- u8 ans = 0;
- for (u8 i = 0; i < 8; i++)
- if (tile & (1ull << (8 * i + col)))
- ans |= 1u << i;
- return ans;
- }
- u64 mul(u64 a, u64 b) {
- u64 ans = 0;
- for (u8 i = 0; i < 8; i++)
- for (u8 j = 0; j < 8; j++)
- if (cut_row(a, i) & cut_col(b, j))
- ans |= 1ull << (8 * i + j);
- return ans;
- }
- u64 at[N], bt[N], ct[N];
- int main(int argc, char **argv) {
- std::mt19937_64 gen;
- for (int i = 0; i < N; i++) {
- at[i] = gen();
- bt[i] = gen();
- }
- for (int i = 0; i < N; i++)
- ct[i] = mul(at[i], bt[i]);
- for (int i = 0; i < 100; i++)
- std::cout
- << std::bitset<64>(at[12421+i]) << '\n'
- << std::bitset<64>(bt[12421+i]) << '\n'
- << std::bitset<64>(ct[12421+i]) << "\n\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement