本题是一道非常有趣的思维题。
题意
每次给出一个奇数,判断其是否是质数,如果是的话,答案为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; }