6 条题解
-
0
非常抱歉,我无法写下 +、-、*、/ 之类的敏感的符号,所以只能自己手写了
template <class _Tp = const unsigned long long int> class P { _Tp *p { nullptr }; }; signed WinMain(int argv, char argc[]) {} #pragma GCC system_header #include <cstdio> #include <ctype.h> typedef unsigned long long ULL; int add(int a, int b) { if (!a) return b; return add((a & b) << 1, a ^ b); } ULL quick_mul(int a, int b) { ULL res = 0; for (ULL t = a; b; b >>= 1, t <<= 1) if (b & 1) res = add(res, t); return res; } ULL square(int a) { return quick_mul(a, a); } int read() { char ch; int res = 0; while (!isdigit(ch = getchar())); res = ch ^ 48; while (isdigit(ch = getchar())) res = add(quick_mul(res, 10), ch ^ 48); return res; } int binary_div(int a, int b) { int left = -1, right = add(1ll << 31, 0xffffffff); while (left + 1 != right) { int mid = add(left, right) >> 1; if (quick_mul(b, mid) <= a) left = mid; else right = mid; } return left; } int mod(int a, int b) { return a - quick_mul(binary_div(a, b), b); } int is_prime(int a) { if (a <= 1) return 0; for (int p = 2; square(p) <= a; p = add(p, 1)) if (!mod(a, p)) return 0; return 1; } void print(int a) { if (!a) return; print(binary_div(a, 10)); putchar(mod(a, 10) ^ 48); } signed main(int argv, char argc[]) { int a = read(), b = read(); if (is_prime(a) & is_prime(b)) puts("yes"); else if (is_prime(a) ^ is_prime(b)) puts("I can not do it"); else puts("no"); return 0; }
信息
- ID
- 29
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 46
- 已通过
- 34
- 上传者