数论分块
1.CF-925(已更新:D-F)2.2024牛客寒假算法基础集训营33.CF-926(已更新:B-C)4.CF-927(已更新:B C E)5.CF-928(已更新:B C D E)6.2024牛客寒假算法集训营4 (已更新:B-E)7.CF EDU-162 (已更新:A-C+D的代码)8.At-abc3429.蒟蒻的补档题(长期更新)10.CF-929(已更新:B-E)11.CF-931(已更新:AB代码)12.PowerOj 2024-康复赛 (待更新)13.CF-932(已更新 A B)14.矩阵快速幂15.CF-933(已更新:B-D)
16.数论分块
17.CF-Edu-163(已更新:A B)18.CF-936(AB)19.AT-abc347(C-E)20.CF-938(C-E)21.CF-943(已更B-E,G1)22.CF-945(已更A,B)23.CF-956(A-D)24.CF-957(D-E)25.CF-959(C-E)26.Codeforces Round 967 (Div. 2)-D27.AtCoder Beginner Contest 396 (E-F)28.Codeforces Round 1008 (Div. 2) (C-D)数论分块
分块整除
例题
向上取整
注意相减时要加上模数再取模
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
const int M=998244353;
int fp(int b,int p){
int res=1;
while(p){
if(p&1) res=res*b%M;
b=b*b%M;
p>>=1;
}
return res;
}
int s=fp(6,M-2)%M;
int f(int n){
return((n*(n+1)%M*(n*2+1)%M)%M*s)%M;
}
void solve(){
int n;cin>>n;
int ans=0;
for(int l=1,r,k;l<=n;l=r+1){
k=(n+l-1)/l;
if(k==1) r=n;
else r=(n-1)/(k-1);
ans+=k*(f(r)-f(l-1)+M)%M;//注意相减时要加上模数再取模
}
cout<<(ans+M)%M<<endl;
}
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;cin>>t;while(t--)
solve();
return 0;
}
根号分治
待
复习更新
#include <iostream>
#include<bits/stdc++.h>
#include <algorithm>
#include <cstring>
using namespace std;
#define endl '\n'
#define int long long
#define debug(x) cout<<x<<" "<<endl;
#define _debug(a,n) for(int i=0;i<n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
const int N=2e5+5;
int a[N],ans[400][400];
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,m,x,y;cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
int s=sqrt(n);
for(int i=1;i<=n;i++){
for(int p=1;p<=s;p++){
ans[p][i%p]+=a[i];//模p,余k
}
}
while(m--){
char cmd;
cin>>cmd>>x>>y;
if(cmd=='A'){
if(x<=s){
cout<<ans[x][y]<<endl;
}
else{
int res=0;
for(int i=y;i<=n;i+=x){
res+=a[i];
}
cout<<res<<endl;
}
}
else {
for(int i=1;i<=s;i++){
ans[i][x%i]+=y-a[x];
}
a[x]=y;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】