题目背景
小卡迷上了质数!
题目描述
小卡最近迷上了质数,所以他想把任何一个数都转化为质数!
小卡有 T 次询问,每次给你一个数字 x ,问有多少个比 x 小的非负整数 y ,使得 x ⊕ y x 是质数,其中 ⊕ 表示按位异或。输入输出格式
输入格式
第一行一个正整数T,表示有 T组询问。
接下来 T 行,每行一个正整数 x ( 1 ≤ x ≤ 1 0 6 ) x(1\le x\le 10^6)x(1≤x≤10
6)。输出格式:
对于每组询问,输出一行一个整数,表示答案。
输入格式
9 5 6 7 8 9 10 100 1000 10000
输出格式
2 4 4 2 2 4 22 163 1132
直接上代码:
#include <bits/stdc++.h>
using namespace std;
//判断是否为质数
bool f(int ans) {
if (ans <= 3)
return ans > 1;
for (int i = 2; i < ans; i++) {
if (ans % i == 0)
return false;
}
return true;
}
int f2(int x, int y) {
return x ^ y;
}
int main() {
int T;
cin >> T;
int x, y;
int ans;
while (T--) {
cin >> x;
int sum = 0;
for (int i = 0; i < x; i++) {
y = i;
ans = f2(x, y);
// cout << ans << " "; //输出与x异或后的数 正确
if (f(ans))
sum++;
}
cout << sum << endl;
// cout << f(ans) << endl; // f(ans)判断是否ans是否为质数 如果是 sum++;
}
return 0;
}
是不是特别简单