很水的一道题。。
用数组 num[i] 记录约数 i 出现的次数
对于添加数的操作 用 √n 枚举 n 的所有约数
注意 n 为完全平方数时num[√n]注意不要多加了一
对于查询操作 num[x] 即为 x倍数的个数
1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 #define N 40040 5 6 int num[N]; 7 int n; 8 9 int main() { 10 scanf("%d",&n); 11 memset(num,0,sizeof(num)); 12 int ans=0; 13 for (int t=1;t<=n;t++) { 14 int k,x; 15 scanf("%d%d",&k,&x); 16 if (k==1) { 17 for (int i=1;i*i<=x;i++) { 18 if (x%i==0) { 19 num[i]++; 20 num[x/i]++; 21 } 22 if (x==i*i) num[i]--; 23 } 24 } 25 else { 26 ans=ans xor num[x]; 27 } 28 } 29 printf("%d",ans); 30 }