当前位置: 首页 > news >正文

简单的数学题

简单的数学题

\(\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j)\ mod\ p,n\leq 10^{10},5×10^8≤p≤1.1×10^9\)且p为质数。

\[ans=\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j)=\sum_{d=1}^nd\sum_{i=1}^n\sum_{j=1}^nij(gcd(i,j)==d)\]

于是设

\[f(d)=\sum_{i=1}^n\sum_{j=1}^nij(gcd(i,j)==d)\]

\[dc(x)=\sum_{i=1}^xi=\frac{(1+x)x}{2}\]

\[F(d)=\sum_{i=1}^n\sum_{j=1}^nij(d|gcd(i,j))=dc(n/d)^2d^2\]

由Mobius反演定理我们有

\[f(d)=\sum_{d|x}dc(n/x)^2x^2\mu(x/d)\]

代入原式,即

\[ans=\sum_{d=1}^nd\sum_{d|x}dc(n/x)^2x^2\mu(x/d)=\]

\[\sum_{x=1}^ndc(n/x)^2x^2\sum_{d|x}d\mu(x/d)\]

显然,后面的函数为积性函数,即\(\mu*id=\phi\),于是

\[\sum_{x=1}^ndc(n/x)^2x^2\varphi(x)\]

注意到\(x^2\)不能整除分块,于是考虑和\(\varphi(x)\)一起维护,所以设\(C(x)=x^2\varphi(x)\),接下来考虑用杜教筛求前缀和,显然只能待定函数法了,于是设\(A=B*C\),所以

\[\sum_{i=1}^nA(i)=\sum_{i=1}^n\sum_{d|i}B(i/d)d^2\varphi(d)\]

为了抵掉分数形式,自然想到令\(B(x)=x^2\),于是我们有

\[\sum_{i=1}^n\sum_{d|i}B(i/d)d^2\varphi(d)=\sum_{i=1}^ni^3=(\frac{(1+n)n}{2})^2\]

于是套杜教筛基本式,我们不难有,设\(S(n)=\sum_{i=1}^nC(i)\)

\[S(n)=(\frac{(1+n)n}{2})^2-\sum_{d=2}^nS(n/d)d^2\]

\(d^2\)前缀和很好处理,进行杜教筛基本操作即可。

参考代码:

#include <iostream>
#include <cstdio>
#define il inline
#define ri register
#define ll long long
#define control 6000000
using namespace std;
template<class f1,class f2>
struct chain{
    chain *next;f1 x;f2 y;
};
template<class f1,class f2,class f3,const f3 key>
struct unordered_map{
    chain<f1,f2>*head[key],*pt;
    il void insert(f1 x,f2 y){
        pt=new chain<f1,f2>,pt->x=x,pt->y=y;
        x%=key,pt->next=head[x],head[x]=pt;
    }
    il chain<f1,f2>* find(ll x){
        for(pt=head[x%key];pt!=NULL;pt=pt->next)
            if(x==pt->x)return pt;
        return NULL;
    }
};
bool check[control+1];
ll prime[500000],pt,phi[control+1],
    yyb,inv6;
il void prepare();
il ll pow2(ll),djs(ll),dc(ll),
    pow(ll,ll),p2sum(ll),p3sum(ll);
int main(){
    ll n,i,j,ans(0);
    scanf("%lld%lld",&yyb,&n),inv6=pow(6,yyb-2),
        prepare();
    for(i=1;i<=n;i=j+1)
        j=n/(n/i),(ans+=pow2(dc(n/i))*(djs(j)-djs(i-1))%yyb)%=yyb;
    printf("%lld",(ans+yyb)%yyb);
    return 0;
}
il ll pow(ll x,ll y){
    ll ans(1);while(y){
        if(y&1)ans=ans*x%yyb;
        x=x*x%yyb,y>>=1;
    }return ans;
}
il ll p2sum(ll n){
    return n%=yyb,n*(n+1)%yyb*(n*2+1)%yyb*inv6%yyb;
}
il ll p3sum(ll n){
    return n%=yyb,pow2(dc(n));
}
il ll dc(ll n){
    return n%=yyb,(n*(n+1)>>1)%yyb;
}
unordered_map<ll,ll,ll,999931>sxr;
il ll djs(ll n){
    if(n<=control)return phi[n];
    if(sxr.find(n)!=NULL)return sxr.find(n)->y;
    ll i,j,ans(p3sum(n));
    for(i=2;i<=n;i=j+1)
        j=n/(n/i),(ans-=djs(n/j)*(p2sum(j)-p2sum(i-1))%yyb)%=yyb;
    return sxr.insert(n,ans),ans;
}
il ll pow2(ll x){
    return x*x%yyb;
}
il void prepare(){
    ll i,j;check[1]|=phi[1]|=true;
    for(i=2;i<=control;++i){
        if(!check[i])prime[++pt]=i,phi[i]=i-1;
        for(j=1;j<=pt&&prime[j]*i<=control;++j){
            check[i*prime[j]]|=true;
            if(!(i%prime[j])){phi[i*prime[j]]=phi[i]*prime[j];break;}
            phi[i*prime[j]]=phi[i]*phi[prime[j]];
        }
    }for(i=1;i<=control;++i)
         (((phi[i]*=pow2(i))%=yyb)+=phi[i-1])%=yyb;
}

转载于:https://www.cnblogs.com/a1b3c7d9/p/10801586.html

相关文章:

  • 关于JS引擎优化的理解
  • 如何优雅的备份账号相关信息
  • mybatis学习总结
  • 全球首个大规模光电芯片到来
  • 1.4T的mysql表删除
  • MYSQL-SELECT查
  • css 浮动的时候如何,div进行居中
  • 大文件如何传输,大文件的传输方式有哪些?
  • 5 分钟掌握 JavaScript 实用窍门
  • Kubernetes弹性伸缩全场景解读(五) - 定时伸缩组件发布与开源
  • Linux下Python3.6的安装及避坑指南
  • 四川建筑企业资质办理材料详细说明
  • 组件化页面:封装el-form
  • Redis过期策略
  • cors方法跨域
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【译】理解JavaScript:new 关键字
  • 11111111
  • 4个实用的微服务测试策略
  • angular2开源库收集
  • Bytom交易说明(账户管理模式)
  • CSS 专业技巧
  • CSS实用技巧干货
  • es6要点
  • ES6之路之模块详解
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • java8-模拟hadoop
  • JAVA之继承和多态
  • js中forEach回调同异步问题
  • Linux快速复制或删除大量小文件
  • Mithril.js 入门介绍
  • React as a UI Runtime(五、列表)
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • vue.js框架原理浅析
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 不上全站https的网站你们就等着被恶心死吧
  • 机器学习 vs. 深度学习
  • 开源SQL-on-Hadoop系统一览
  • 前端工程化(Gulp、Webpack)-webpack
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 原生JS动态加载JS、CSS文件及代码脚本
  • MyCAT水平分库
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​queue --- 一个同步的队列类​
  • ​如何防止网络攻击?
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (a /b)*c的值
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (TOJ2804)Even? Odd?
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (三)c52学习之旅-点亮LED灯
  • (数据结构)顺序表的定义
  • (转)C#调用WebService 基础
  • ***原理与防范