定义序列 B :
你要求
这样我们只要输入三个数,输出一个数啦~
其中
表示异或,也就是说你需要把所有的
异或起来输出
倍数分配法思路(Onlogn)
我们按 j 枚举 1~n,把 a[j] 加到所有 j 的倍数上:
j = 1 → i=1,2,3,4,5,6 加 a[1]=10
j = 2 → i=2,4,6 加 a[2]=24
j = 3 → i=3,6 加 a[3]=45
j = 4 → i=4 加 a[4]=73
j = 5 → i=5 加 a[5]=108
n,a1,m=map(int,input().split()) a=[0,a1];b=[0]*(n+1) for i in range(2,n+1): a.append((a[i-1]+7*i)%m); for i in range(1,n+1): for j in range(i,n+1,i): b[j]+=a[i] ans=b[1] for i in range(2,n+1): ans^=b[i] print(ans)