牛客月赛 G-many sum(筛因子)

it2026-08-16  11

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

备注:

1N2×10^6,0A1,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

相关资源:数据结构—成绩单生成器
最新回复(0)