6 条题解

  • 0
    @ 2025-9-14 10:25:44

    非常抱歉,我无法写下 +、-、*、/ 之类的敏感的符号,所以只能自己手写了

    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
    上传者