many sum
链接:https://ac.nowcoder.com/acm/contest/879/G来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld
题目描述
输入描述:
第一行三个整数
N,A1,M
输出描述:
第一行一个整数,表示答案。
示例1
输入
复制
10 10 313
输出
复制
441
备注:
1≤N≤2×10^6,0≤A1,M<10^4通过此题的同学,不妨来想一些如果N=2×107的时候该怎么做呢?d|i为“d整除i”或“i被d整除”,可看作i%d==0,也就是需要找i所有的因子。筛因子法利用逆向思维,枚举因子的倍数反向加入到i中。一开始存表预处理1~n因子T了,这里找到直接加入Bi即可,一步到位。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[
2000005],b[
2000005];
int main()
{
int t,k,i,j;
ll n,m;
scanf("%d%d%d",&n,&a[
1],&
m);
for(i=
2;i<=n;i++
){
a[i]=(a[i-
1]+
7*i)%
m;
}
for(i=
1;i<=n;i++
){
for(j=i;j<=n;j+=i){
//筛因子
b[j]+=
a[i];
}
}
ll ans=
0;
for(i=
1;i<=n;i++
){
ans^=
b[i];
}
printf("%lld\n",ans);
return 0;
}
转载于:https://www.cnblogs.com/yzm10/p/10850427.html
相关资源:数据结构—成绩单生成器