Sum Of Gcd(欧拉函数+莫队算法详解)

HDU 5381 The sum of gcd 询问区间内所有子区间的GCD和 [莫队算法] 预处理+莫队,需要抓住 gcd 的本质。 阅读详情

Sum Of Gcd

 Given you a sequence of number a 1, a 2, ..., a n, which is a permutation of 1...n.
You need to answer some queries, each with the following format:
Give you two numbers L, R, you should calculate sum of gcd(a[i], a[j]) for every L <= i < j <= R. 

Input
First line contains a number T(T <= 10),denote the number of test cases.
Then follow T test cases.
For each test cases,the first line contains a number n(1<=n<= 20000).
The second line contains n number a 1,a 2,…,a n.
The third line contains a number Q(1<=Q<=20000) denoting the number of queries.
Then Q lines follows,each lines contains two integer L,R(1<=L<=R<=n),denote a query.
Output
For each case, first you should print “Case #x:”, where x indicates the case number between 1 and T.
Then for each query print the answer in one line.
Sample Input

1
5
3 2 5 4 1
3
1 5
2 4
3 3

Sample Output

Case #1:
11
4
0
题意:

给定一个1到n的全排列A,若干个询问,每次询问给出一个区间[l,r]1到n的全排列A,若干个询问,每次询问给出一个区间[l,r],要求

∑l≤i<j≤rgcd(Ai,Aj)∑l≤i<j≤rgcd(Ai,Aj)
分析:

对于这道题目,我们比较容易统计的是各个数对公约数的出现次数,而不容易统计最大公约数的出现次数

为什么呢?

举个例子假设我有数列{4,5,8}{4,5,8}

4的约数有1,2,4;
5的约数有1,5;
8的约数有1,2,3,4,8;

我们设cnt(d)cnt(d) 表示约数d在数列中出现的次数

根据上面枚举我们知道约数1出现了三次cnt(1)=3cnt(1)=3,约数2出现了两次cnt(2)=2cnt(2)=2,约数5出现了1次cnt(5)=1cnt(5)=1,约数4出现了2次cnt(4)=2cnt(4)=2,约数8出现了1次cnt(8)=1cnt(8)=1

那么既然是两个数的公约数d,对于每个约数,只要从约数个数中任取其中2个即为两个数的公约数,所以很明显通过组合数我们知道公约数为d可能的情况为

C2cnt(d)=cnt(d)×(cnt(d)−1)2Ccnt(d)2=cnt(d)×(cnt(d)−1)2

所以和为公约数乘其出现次数即

C2cnt(d)×dCcnt(d)2×d

但是!

很明显这并不是我们想要求的,我们原本是想枚举d作为最大公约数,这样我们求得了最大公约的数对的个数然后乘d,最后合起来不就行了。但是我们发现其中会有大量重复,比如上面例子中对于4和8来说就很难办,因为它会把其公约数1,2,4全部统计一遍加进去,而我们只想要4的情况

因此这种想法以失败告终。。

但是其中思路和想法仍然对于我们进一步分析有重大意义


既然我们只能统计公因数,而不能统计最大公因数,那么我们就将计就计,我们就统计公约数

但是题目要求最大公约数的和

因此我们想要找到两个数最大公约数和公约数的关系:

1)首先我们要知道的第一个常识是两个数的公约数一定是这两个数的最大公约数的约数

2)欧拉函数求和公式:
设d1,d2,⋯dr是n的因数d1,d2,⋯dr是n的因数,则

ϕ(d1)+ϕ(d2)+⋯+ϕ(dr)=nϕ(d1)+ϕ(d2)+⋯+ϕ(dr)=n

这里不进行证明了

因此根据上面的性质个关系我们得到

gcd(Ai,Aj)=∑d|gcd(Ai,Aj)ϕ(d)gcd(Ai,Aj)=∑d|gcd(Ai,Aj)ϕ(d)

(d是gcd的因子)

因此原式

∑l≤i<j≤rgcd(Ai,Aj)∑l≤i<j≤rgcd(Ai,Aj)

=∑l≤i<j≤r∑d|gcd(Ai,Aj)ϕ(d)=∑l≤i<j≤r∑d|gcd(Ai,Aj)ϕ(d)

这样变成了求公约数d的欧拉函数ϕ(d)ϕ(d)之和

ϕ(d)ϕ(d)完全可以预处理出来,我们只要知道他有多少个就行了,一乘就是和

因此继续化简

原式=∑ϕ(d)∑l≤i<j≤r[d|Ai]⋅[d|Aj]原式=∑ϕ(d)∑l≤i<j≤r[d|Ai]⋅[d|Aj]

显然式子中∑l≤i<j≤r[d|Ai]⋅[d|Aj]∑l≤i<j≤r[d|Ai]⋅[d|Aj]代表的就是d作为公约数时的所有可能情况

只要我们统计出数d是区间内多少个数的公约数即一开始我们设的cnt(d)cnt(d)那么

∑l≤i<j≤r[d|Ai]⋅[d|Aj]=C2cnt(d)∑l≤i<j≤r[d|Ai]⋅[d|Aj]=Ccnt(d)2

现在问题的核心部分已经解决了我们已经将原式转化乘求某个数d作为公约数的可能数乘其欧拉函数,最后求和。每个数的约数和欧拉函数预处理出来。

因为题目给的是区间查询,而且是无修改的,因此想到可以使用莫队算法进行离线查询

对于假设区间[L,R][L,R]的答案我们已经知道了

1) 我们想要算[L−1,R]或[L,R+1][L−1,R]或[L,R+1]怎么办?

其实求这两个区间属于同一类都是扩展,增加了新的数n

对于新增加的数n,我们枚举其因子d

此时原来的∑d|nϕ(d)×C2cnt(d)变成∑d|nϕ(d)×C2cnt(d)+1∑d|nϕ(d)×Ccnt(d)2变成∑d|nϕ(d)×Ccnt(d)+12

根据组合数的性质Ckn=Ckn−1+Ck−1n−1Cnk=Cn−1k+Cn−1k−1

那么我们要求∑d|nϕ(d)×C2cnt(d)+1∑d|nϕ(d)×Ccnt(d)+12只需要求出C2cnt(d)+1Ccnt(d)+12

而对于当前我们有C2cnt(d)Ccnt(d)2只需要加上C1cnt(d)=cnt(d)这个cnt(d)是未更新前的cnt(d)Ccnt(d)1=cnt(d)这个cnt(d)是未更新前的cnt(d)

所以对于答案而言我们只需加上ϕ(d)×cnt(d)ϕ(d)×cnt(d)即完成更新

然后在更新cnt(d)cnt(d)

2)如果想要求[L+1,R]或[L,R−1][L+1,R]或[L,R−1]我们发现他们都是需要除去一个数 n

对于要除去的n,这个数肯定是原来区间内的数(边界上的数)

同理枚举其约数d

仍然根据公式

C2cnt(d)=C2cnt(d)−1+C1cnt(d)−1Ccnt(d)2=Ccnt(d)−12+Ccnt(d)−11

我们现在知道的是C2cnt(d)Ccnt(d)2需要得到C2cnt(d)−1Ccnt(d)−12

所以只需减去C1cnt(d)−1=cnt(d)−1Ccnt(d)−11=cnt(d)−1即可

然后更新cnt(d)cnt(d)

当然这个题应该是可以用莫比乌斯反演做,但是看了网上的一篇代码写快300行就没看

code:

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
typedef long long ll;
const int maxn = 20010;
int T,n,m,blocklen,block[maxn],a[maxn],fac[maxn][210];
ll phi[maxn],p[maxn],cnt[maxn],ans[maxn],sum;
bool isprime[maxn];
struct Query{
    int id,l,r;
    bool operator < (const Query &a)const{   /分块排序
        if(block[l] == block[a.l])
            return r < a.r;
        return block[l] < block[a.l];
    }
}q[maxn];

void Euler(){//预处理处欧拉函数
    phi[1] = 1;
    for(int i = 2; i < maxn; i++){
        phi[i] = i;
    }
    for(int i = 2; i < maxn; i++){
        if(phi[i] == i){
            for(int j = i; j < maxn; j += i){
                phi[j] = phi[j] / i * (i - 1);
            }
        }
    }
}

void init(){//记录下每个数的因数
    for(int i = 1; i < maxn; i++){
        fac[i][0] = 0;//记录因数个数
        for(int j = 1; j * j <= i; j++){
            if(i % j == 0){
                fac[i][++fac[i][0]] = j;
                if(j * j != i) fac[i][++fac[i][0]] = i / j;
            }
        }
    }
}

void expend(int x,ll add){
    for(int i = 1; i <= fac[a[x]][0]; i++){
        int j = fac[a[x]][i];//暂存a[x]的一个因子
        //更新
        if(add == 1) sum += cnt[j] * phi[j]; //这里add=1时乘的是cnt[j]
        else sum -= (cnt[j] - 1) * phi[j];//减的时候乘的是cnt[j]-1,原因看上面解释
        cnt[j] += add;//最后更新这个因子的个数(有多少个数含有这个因子)
    }
}

void Mo(){
    int l = 1,r = 0;
    memset(cnt,0,sizeof(cnt));
    sum = 0;
    for(int i = 1; i <= m; i++){
        while(q[i].l < l) expend(--l,1);
        while(q[i].r > r) expend(++r,1);//前两个是扩展所以要用前缀加减,这样处理加上新的数
        while(q[i].l > l) expend(l++,-1);
        while(q[i].r < r) expend(r--,-1);//后两个是减少所以要把原来的边界减去,所以处理的是原来的,传进去的原来边界值
        ans[q[i].id] = sum;
    }
}
int main(){
    Euler();
    init();
    scanf("%d",&T);
    int cas = 0;
    while(T--){
        scanf("%d",&n);
        for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
        scanf("%d",&m);
        blocklen = (int)sqrt(n);
        for(int i = 1; i <= n; i++){
            block[i] = i / blocklen;
        }
        for(int i = 1; i <= m; i++){
            scanf("%d%d",&q[i].l,&q[i].r);
            q[i].id = i;
        }
        sort(q+1,q+1+m);
        Mo();
        printf("Case #%d:\n",++cas);
        for(int i = 1; i <= m; i++)
            printf("%lld\n",ans[i]);
    }
    return 0;
}
HDU 5381 The sum of gcd (2015年多校比赛第8场) 1.题目描述:点击打开链接 2.解题思路:本题利用莫队算法解决。由于是第一次学习这个算法,因此研究了比较长的一段时间才弄懂。首先,莫队算法解决的问题是无修改的离线区间查询问题。该算法实际上是由曼哈顿距离最小生成树演变来的,由于要处理m个区间,可以将这m个区间看做二维平面上的点,那么处理这m个区间就等价于让这m点连通,且总的转移代价最小。这其实就是一个曼哈顿距离最小生成树问题。 经典的曼 阅读详情

相关推荐

不止是打字机效果:手把手教你用SpannableStringBuilder打造Android富文本AI对话界面

本文详细介绍了如何使用SpannableStringBuilder在Android平台上构建专业级AI对话界面,涵盖流式文本处理、富文本解析、交互优化等核心技术。通过实战代码示例,帮助开发者实现类似DeepSeek的AI产品交互效果,提升用户体验和应用专业度。

weixin_28358083的博客 197

公约数的和 / 最大公约数 / GCD SUM【欧拉函数】

>Link luogu P1390 jzoj 1349 >Description //服了啊latex打不开,先放着明天再写吧QAQ 给出nnn,求$$$$ >解题思路 #关于欧拉函数 $$表示111 ~ n−1n-1n−1中与nnn互质的数的个数 对于质数nnn,那么肯定=n−1=n-1=n−1 >代码 #include <iostream> #include <cstdio> #include <cstring> #include &lt

//(^ o ^)// 446

避坑指南:OpenWRT改AP模式必做的5个关键设置(DHCP/防火墙/WAN口处理)

本文详细解析了将OpenWRT设备从路由模式切换为AP模式时,必须完成的五个关键设置步骤。核心在于理解AP模式本质是带无线的智能交换机,需彻底关闭DHCP服务、调整防火墙策略、正确桥接所有物理接口(包括WAN口处理),并集成无线网络,以确保设备能透明接入主路由网络,避免出现设备隔离或无法互访等常见问题。

t1u2v的博客 732

Sum Of Gcd(hdu 4676)

Sum Of Gcd Time Limit: 10000/5000 MS (Java/Others)Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 738Accepted Submission(s): 333 Problem Description Given you a sequen...

weixin_30778805的博客 152

ANSYS HFSS 中的相控天线阵列仿真方法

相控天线阵列系统广泛使用,从国防雷达应用到商业 5G 应用。设计这些天线阵列涉及复杂的数学运算,需要全波仿真。Ansys HFSS 全场 3D 电磁仿真软件可以在合理的时间内以较低的计算成本仿真复杂的相控阵天线系统,同时考虑复杂激励、环境(即附近的天线)和平台对其性能的影响。本博客介绍了可用于有效仿真相控天线阵列的不同方法。以下是不同仿真方法的简要概述,视频链接中提供了完整的演示。ANSYS HFSS 提供 4 种不同的相控天线阵列仿真方法:1) 晶胞-无限阵列。

jkh920184196的博客 4247

A*寻路算法的最简单通俗讲解

为什么我的眼里常含泪水?因为我有一个算法不会。为了节约点眼泪,今天我们就来介绍著名的A*寻路算法(或简称A*算法)。 Peter Hart, Nils Nilsson 和 Bertram Raphael 在1968年首次提出了著名的A*算法。A*算法其实是Dijkstra最短路径算法的一种扩展。不一样的是,在A*算法中我们需要使用Heuristics 来导引搜索过程,以期达到更好的表现。 ...

白马负金羁 2万+

hdu 4676 Sum Of Gcd 莫队+phi反演

Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of number a1, a2, ..., an, which is a permutation of 1...n. You need to answer some queries, each with ...

weixin_34106122的博客 151

热力学仿真软件:ANSYS CFX_(15).旋转机械仿真

创建旋转域在中选择需要设置为旋转域的区域。选择选项。设置旋转速度在设置中,指定旋转速度(单位为弧度/秒)。也可以选择选项,并输入具体值。设置旋转轴在设置中,指定旋转轴的方向和位置。通常旋转轴的方向可以使用单位向量来表示,例如[0, 0, 1]表示沿Z轴旋转。旋转轴的位置可以通过指定一个点的坐标来确定,例如[0, 0, 0]表示旋转轴通过原点。旋转机械的仿真在ANSYS CFX中是一个复杂但重要的过程。

kkchenjj的博客 1157

gcd之和(一维)

首先我们要认清楚一件事情,既然是要线性的,那么也就是说我们的枚举目标要改了,如果在去枚举。然后我们就找到了一位好朋友,欧拉函数的影子(是根号做法的关键)。必须互质,具体的证明可以使用中国剩余定理,不会的同学,翻上面。的方法当然是我们的辗转相除法啦,那么代码上面也有,再放一下吧。我们也使用最简单的哪一种去做,也就是从小到大跑,时间复杂度。的时间复杂度,那是绝对不可能的吧。,所以说连线性的复杂度都吃不消,那么我们只能想到了。的时间复杂度,那么这个代码的时间复杂度就是。的时间复杂度解决问题了,完结撒花!

mikeshizi1234的博客 1543

手把手教你学Simulink--基于Simulink的机械臂工业装配任务仿真建模

特点高精度要求:装配过程通常需要非常高的位置精度。多步骤操作:一个完整的装配任务可能包含多个连续的子任务,如抓取零件、移动到特定位置、装配等。动态环境:工作环境可能是动态变化的,例如其他机器人或人员在同一空间内工作。挑战复杂性管理:需要处理复杂的运动学和动力学问题,以及可能的碰撞避免。实时性:某些应用场景下需要快速响应以保证生产效率。集成度:需要与其他系统(如传感器、PLC等)无缝集成。首先明确要模拟的装配任务内容。零件的位置和尺寸。装配顺序。

MHD0815的博客 239

元学习与Transformer的结合:Meta-Transformer架构解析

我们生活在一个信息爆炸的时代,每天都会产生海量的数据。在深度学习领域,如何让模型更高效地学习、更快地适应新的任务,一直是科学家们努力的方向。元学习和Transformer都是深度学习中的重要概念,它们各自有着独特的优势。本文的目的就是深入剖析将元学习和Transformer结合起来的Meta - Transformer架构,探讨它的原理、应用以及未来发展。我们会从基础概念讲起,逐步深入到架构的各个方面,让大家对Meta - Transformer有一个全面的了解。

AI智能探索者的博客 1052

洛谷数学题 GCD SUM(欧拉函数)

题目连接:GCD SUM 分析:题目很简洁。求gcd的和。暴力是不可能过的。考虑所有gcd的值,对于gcd(x,y)=1,都有gcd(xk,yk)=k(xk<=n&&yk<=n),那么gcd(x’,y’)=k的个数就是2*∑i=1n/k\sum_{i=1}^{n/k}∑i=1n/k​f(i) -1 (f(i)为欧拉函数,(x,y)和(y,x)为两组,但是只有当x=y=1时是一组,所以要减一。) 代码: #include<iostream> #define IOS i

m0_53419838的博客 477

Vue3 - 详解实现网站接入钉钉扫码登录功能,钉钉授权生成登录二维码用户用手机扫描二维码登陆,支持弹框式、浏览器单独新开页显示,钉钉扫描二维码登录详细流程及示例代码,最新vue集成钉钉扫码授权登录!

vue3,nuxt3,钉钉,扫码登录,vue3钉钉扫码登陆,钉钉授权第三方WEB网站扫码登录功能,钉钉扫码登录第三方网站,单点登录,二维码不显示,报错,扫了没反应,出错,vue3钉钉扫码登录,内嵌,获取个人信息,pc网页钉钉登录,钉钉扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描钉钉二维码登录网站,页面弹出一个小窗口而不是打开一个页面,vue3中使用iframe实现另开小窗口扫码登

🏆 前端领域优质创作者 3694

【HDU4676】Sum Of Gcd-莫队算法+欧拉函数

测试地址:Sum Of Gcd 题目大意:给定一个111~nnn的全排列AAA,若干个询问,每次询问给出一个区间[l,r][l,r][l,r],要求得出∑l≤i&lt;j≤rgcd(Ai,Aj)∑l≤i&lt;j≤rgcd(Ai,Aj)\sum_{l\le in=∑d|nφ(d)n=∑d|nφ(d)n=\sum_{d|n}\varphi(d) 那么有: ∑l≤i&lt;j≤rgcd(Ai,A...

Maxwei_wzj的OI世界 389

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

hdu 5381 The sum of gcd 莫队算法+区间gcd

题意: 略 思路: 杰哥说这种题他都做烂了。。。。orz 对于每个a[i]值,我们处理出以a[i]为起点,分别往左边和往右边的gcd区间的情况(gcd区间个数不会超过log(a[i])个,简单解释就是gcd相同的可以合并,且随着区间扩大,若gcd值不同,则每次至少除以2)。 a[i+1]的gcd区间可以由a[i]的情况推出,遇到可以合并的区间(gcd相等)就合并掉。 例如 2 3

1089

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

HDU 4676 Sum Of Gcd 【莫队 + 欧拉】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=4676 Sum Of Gcd Time Limit: 10000/5000 MS (Java/Others)Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 908Accepted Submission(s): ...

weixin_30686845的博客 142

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【HDU4676】Sum Of Gcd(莫队+欧拉函数)

点此看题面 大致题意: 多组询问,求\(\sum_{i=L}^R\sum_{j=i+1}^Rgcd(i,j)\)。 推式子 这道题我们可以考虑,每个因数\(d\)被统计答案的次数,肯定与其出现次数有关。 设它出现次数为\(cnt_d\),则可以猜测答案为: \[\sum_{d=1}^nd\cdot C_{cnt_d}^2\] 这显然是错的,因为\(d\)虽作为公因数,却不一定是最大公约数。 所以就...

weixin_30352191的博客 142

hdu 5381 莫队算法/gcd

The sum of gcd Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 645    Accepted Submission(s): 279 Problem Description You have an array

写东西的地方 1085

HDU 5381 The sum of gcd

The sum of gcd Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description You have an array A,the length of A is n Let f(l,r)=∑ri=l∑rj=igcd

JYZ's Blog 478

HDOJ 5381 The sum of gcd 莫队算法

大神题解: http://blog.youkuaiyun.com/u014800748/article/details/47680899 The sum of gcd Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 526

码代码的猿猿 1060

GCD - Extreme 欧拉函数

Given the value of N, you will have to find the value of G. The definition of G is given below: G = i ∑ i=1 j ∑ ≤N j=i+1 GCD(i, j) Here GCD(i, j) means the greatest common divisor of integer

Big_Rui的博客 911

欧拉函数 与 GCD

分析:假设 gcd(X,N) =d,令 N = p * d,X = q * d,一定有 p,q 互质,又因为 X <= N,所以q <= p,即 q 的个数正好对应p的欧拉函数,q 的个数即为x的个数 ,即gcd(X,N) = d 的X的个数是N/d 的欧拉函数值。 Sum 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述

lois_123的专栏 918

HDU 5381 The sum of gcd 莫队暴力

链接 题解链接:http://www.cygmasot.com/index.php/2015/08/15/hdu_5381/ 题意: 给定n长的序列 下面n个数给出这个序列 m个询问 下面m行给出询问的区间。 对于一个询问,输出这个区间内的任意子段的gcd 和。 思路: 因为一个数的gcd只会不变或下降,下降一次至少减半,下降至多32次,所以处理出每个数连续相同的gcd的区间。 然后暴力跑莫队。 #pragma comment(linker, "/STACK:1

九野的博客 2636

洛谷 P2398 GCD SUM

摘要 本文研究了洛谷P2398题"GCD SUM",通过数论中的欧拉函数性质,将双重求和问题转化为单重求和问题。利用欧拉函数的性质n=∑φ(d)(d|n),将原问题转换为∑(⌊n/d⌋²·φ(d)),其中1≤d≤n。采用线性筛法高效预处理1到n的欧拉函数值,算法复杂度为O(n)。最终实现简洁高效,仅需遍历一次即可求得结果。该解法展示了数论知识在实际问题中的应用价值,特别适合处理大规模数据情况下的gcd求和问题。

君义NOIP的博客 920

欧拉函数定义及其性质

欧拉函数定义,性质和例题(附代码)

weixin_64237088的博客 1211

【HDU 4676 Sum Of Gcd】莫队算法

HDU4676 题意就是求某个区间内两两gcd之和。 关于一个区间内两两GCD之和,我们有一个推导: 对一个序列的某个区间L,R,每个数两两之间的GCD之和为Σd|nφ(d)×C2num(d)Σd|nφ(d)×Cnum(d)2 \varSigma _{d|n}\varphi \left( d \right) \times C_{num\left( d \right)}^{2} d在这里指...

lajiyuan的博客 461
上一篇: GuGuFishtion HDU - 6390(莫比乌斯反演+线性求逆元)
下一篇: Hunters HDU - 4438 (概率期望)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值