本题是一道非常有趣的思维题。
题意
每次给出一个奇数,判断其是否是质数,如果是的话,答案为1,否则答案为0。但是除了第一个数据以外,每个数据都是异或了之前的答案(0/1)的。最后一个数据不用判断。
思路
因为每次给出的都是奇数,所以只需要逆向思维,检索最后一个位(bit)即可。
也就是看它是奇数还是偶数。
为什么可以这样呢?对于第二个及以后的数,因为每次给出的都是奇数,如果现在的数据偶数,那么就说明最后一位xor(异或)了1,奇数则说明最后一位xor了0。
所以可以用下一个数据逆向推导出上一个数据的答案。
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define sc(x) scanf("%lld", &(x))
using namespace std;
typedef long long ll;
int main() {
ll T,a;
sc(T);
--T,sc(a);
while(T--){
sc(a);
if(a&1)puts("0");
else puts("1");
}
return 0;
} 
京公网安备 11010502036488号