-
这个代码的y++怎么解释?
2020-11-26 16:58:52<p>#include"stdio.h" int main() {<!-- --> int x, y, z; for (x = 1, y = 0; x <=...刚刚你输入了%d个3的倍数!",y); }</p> -
[从零开始学算法]求最小公倍数与最大公约数
2020-06-01 13:08:42对于求两个数的最小公倍数与最大公约数,最大公约数等于两数相乘再除以最大公约数,所以问题的核心就是怎么求最大公约数。我所知道的有四种方法:穷举法(不推荐使用),辗转相除法(使用最多),更相减损术,Stein...求两个数的最大公约数与最小公倍数
对于求两个数的最小公倍数与最大公约数,最大公约数等于两数相乘再除以最大公约数,所以问题的核心就是怎么求最大公约数。我所知道的有四种方法:穷举法(不推荐使用),辗转相除法(使用最多),更相减损术,Stein算法(密码领域用的多)
穷举法(暴力搜索)
穷举法就不多解释了直接给代码
int GCD1(int a,int b)//暴力搜索 { int gcd=(a>b?b:a); for(int i=gcd; i>0; i--) { if(a%i==0&&b%i==0) { gcd=i; break; } } return gcd; }
辗转相除法(欧几里得算法)
辗转相除法分如下两部步:
- 较大数a对教小数b进行取余运算得到余数c;
- 若余数为零,则较小数为最大公约数;否则令a=b,b=c重新执行第一步
递归代码如下(要求a,b按大小输入):
int GCD2(int a,int b)//辗转相除 { return b==0?a:GCD2(b,a%b); }
非递归代码如下:
int GCD2(int a,int b)//辗转相除 { int big,small; if(a>b) { big=a; small=b; } else { big=b; small=a; } for(int i=big%small; i>0; i=big%small) { big=small; small=i; } return small; }
更相减损术
更相减损术用的是减法而不是除法,具体步骤如下:
- 两数若都为偶数则两数一直都除以2到不都为偶数,并记录除以了几个2;
- 较大数a减较小数b得到差值c;
- 若c与b相等,则c为最大公约数,否则令a=max(b,c),b=min(b,c)再执行第二步;
代码如下:
int GCD3(int a,int b)//更相减损术 { int mul=1; int big,small; if(a>b) { big=a; small=b; } else { big=b; small=a; } while(1) { if(big%2==0&&small%2==0) { mul*=2; big/=2; small/=2; } else break; } for(int i=big; i!=small; i=big-small) { if(i>small) { big=i; } else { big=small; small=i; } } return small*mul; }
Stein算法
欧几里得算法与更相减损术的缺陷
欧几里德算法是计算两个数最大公约数的传统算法,无论从理论还是从实际效率上都是很好的。但是却有一个致命的缺陷,这个缺陷在素数比较小的时候一般是感觉不到的,只有在大素数时才会显现出来。
更相减损术在两数相差较大时,会进行多次无意义运算,两数相差越大,无意义运算越多,效率过低。
一般实际应用中的整数很少会超过64位(当然已经允许128位了),对于这样的整数,计算两个数之间的模是很简单的。对于字长为32位的平台,计算两个不超过32位的整数的模,只需要一个指令周期,而计算64位以下的整数模,也不过几个周期而已。但是对于更大的素数,这样的计算过程就不得不由用户来设计,为了计算两个超过64位的整数的模,用户也许不得不采用类似于多位数除法手算过程中的试商法,这个过程不但复杂,而且消耗了很多CPU时间。对于现代密码算法,要求计算128位以上的素数的情况比比皆是,设计这样的程序迫切希望能够抛弃除法和取模。于是便有了Stein算法。
算法的思想
由J. Stein 1961年提出的Stein算法很好的解决了欧几里德算法中的这个缺陷,Stein算法只有整数的移位和加减法,为了说明Stein算法的正确性,首先必须注意到以下结论:- gcd(a,a)=a,也就是一个数和其自身的公约数仍是其自身。
- gcd(ka,kb)=k gcd(a,b),也就是最大公约数运算和倍乘运算可以交换。特殊地,当k=2时,说明两个偶数的最大公约数必然能被2整除。
- 当k与b互为质数,gcd(ka,b)=gcd(a,b),也就是约掉两个数中只有其中一个含有的因子不影响最大公约数。特殊地,当k=2时,说明计算一个偶数和一个奇数的最大公约数时,可以先将偶数除以2。
算法的步骤
- 两数若都为偶数则两数一直都除以2到不都为偶数,并记录除以了几个2;
- 若两数中还有非偶数,将其除以2至奇数
- c=|数a-数b|,d=min(数a,数b),
- 若c为0则d为最大公约数,否则令a=c,b=d重复第二步
代码如下:
int GCD4(int a,int b)//Stein { int mul=1; while(1) { if(a%2==0&&b%2==0) { a>>=1; b>>=1; mul<<=1; } else if(a%2==0) { a>>=1; } else if(b%2==0) { b>>=1; } else break; } while(a>0) { while(a%2==0) { a>>=1; } int abs=fabs(a-b); int small=a>b?b:a; a=abs; b=small; } return b*mul; }
c++代码
具体实现代码及效果图:
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int GCD1(int a,int b);//暴力搜索 int GCD2(int a,int b);//辗转相除 int GCD3(int a,int b);//更相减损术 int GCD4(int a,int b);//Stein算法 int main() { int a=0,b=0; int gcd[4]= {1,1,1,1}; //最大公约数:greatest common divisor(gcd) int lcm[4]= {1,1,1,1}; //最小公倍数:least common multiple(lcm) while(cin>>a>>b) { gcd[0]=GCD1(a,b); gcd[1]=GCD2(a,b); gcd[2]=GCD3(a,b); gcd[3]=GCD4(a,b); for(int i=0; i<4; i++) { lcm[i]=a*(b/gcd[i]);//先算除法防止越界 cout<<gcd[i]<<" "<<lcm[i]<<endl; } } return 0; }
萌新一个,若代码有错误或算法思想有问题还望多多斧正; -
差异表达基因-火山图和聚类图解释
2019-02-15 10:40:38今天就先来聊聊如何看差异表达基因数据,火山图,聚类图又怎么看。1差异基因筛选方法那差异基因是如何筛选出来的呢?差异基因的筛选方法有很多,包括倍数法、T检验、F检验及SAM等。 下面简单介绍一下GCBI...想研究某现象的分子机制,老板豪气的来一句,先测个转录组吧,看下差异表达基因。
是否在心里窃喜,制个样就完事了,太easy有木有。等大堆数据回来的时候,是不是傻眼了?
从何下手挑选差异表达基因呢?
今天就先来聊聊如何看差异表达基因数据,火山图,聚类图又怎么看。1差异基因筛选方法那差异基因是如何筛选出来的呢?差异基因的筛选方法有很多,包括倍数法、T检验、F检验及SAM等。
下面简单介绍一下GCBI平台上用的倍数法和SAM法。
倍数法适用于没有生物学重复的样本,其计算基因在两个条件下表达水平的比值,确定比值的阈值,将绝对值大于此阈值的基因判断为差异基因。
SAM算法适用于有生物学重复的样本,通过对分母增加一个常量 T 检验过程减小了假阳性发生的概率。文献中报道,相较于其他算法,SAM算法更为稳定,筛选出的结果也更为准确。2差异基因数据解读经过合适的差异基因方法筛选出的差异基因,结果一般分为两部分,数据+图形。
数据结果展示如下图所示(两分组)众多参数中,重点看三个。
p-value或q-value
没有做生物学重复请跳过这一步。
p-value或q-value是统计学检验变量,代表差异显著性,一般p-value或q-value小于0.05代表具有显著性差异,但可根据具体情况适当调整。
因为p-value或q-value衡量地是某个基因假阳性的概率,如果p-value或q-value越低,那么挑选该基因出现假阳性的概率就越低,可验证性就越高。
两者具体的计算方法具体如下:那p-value、q-value同时存在时看哪个呢?
SAM法只有q-value。当两者同时存在时,可根据具体情况具体分析。
差异筛选是一个典型的多重假设检验过程,对于多重假设检验,单次检验中差异显著基因的假阳性率(p-value较小)可能会较大,而q-value和FDR值较常见的BH校正方法得到的FDR值而言,改进了其对假阳性估计的保守性。
即q-value相比于p-value更加严格,当差异基因结果较少时,可以退而求其次看p-value。Fold ChangeFold Change表示实验组比上对照组的差异表达倍数,一般表达相差2倍以上是有意义的,放宽要求1.5倍或者1.2倍也可以接受。
看表达倍数的同时还需结合基因表达丰度,信号值太低的基因会在后续的验证实验中检测不到。3差异基因图表解读在差异结果的图形展示结果中,主要是火山图和聚类图。火山图火山图只针对两分组且有生物学重复的情况。
如何看火山图呢?火山图可反映总体基因的表达情况,横坐标代表log2(Fold Change),纵坐标表示-log10(P值),每个点代表一个基因,颜色用以区分基因是否差异表达,图中橙色的点代表差异表达基因,蓝色的点代表没有差异表达的基因。聚类图
聚类图可以衡量样本或基因之间表达的相似性。
如上图所示的聚类图中,横坐标代表样本聚类,一列代表一个样本,聚类基于样本间基因表达的相似性,样本间基因表达越接近,靠的越近,以此类推。
纵坐标代表基因聚类,一行代表一个基因,聚类基于基因在样本中表达的相似性,基因在样本中表达越接近,靠的越近,以此类推。
色阶代表基因表达丰度,越红代表上调得越明显,越绿代表下调得越明显。
如何做聚类图请戳往期推送做个聚类图只需1分钟
差异基因有了,如何挑选潜在基因进行实验验证呢?
关键还在于感兴趣点在哪了。粗略的看,可以先看KEGG或者GO功能分类,看差异基因具体富集在哪些通路或功能。
比如关注的是细胞内脂肪酸合成关键酶,可以重点看脂肪酸合成和碳流相关通路。具体如何看KEGG或者GO功能分类,请听下回分解。参考
https://www.cnblogs.com/leezx/p/6601967.html
DrugAI -
怎么把文字变成图形_PPT 中实现文字矢量化
2021-01-04 20:40:3901 科普小知识首先,给各位解释一下什么是矢量化。以下是百度百科给的参考。矢量化简单来说,文字矢量化就是将文字转变成可以编辑的形状,而且这个图形无论怎么放大都不会失真。图1 字体为演示镇魂行楷图2 字体为...Hello,好久不见!
今天要分享的是关于PPT的一个小技能——文字矢量化。
01 科普小知识
首先,给各位解释一下什么是矢量化。以下是百度百科给的参考。
矢量化 简单来说,文字矢量化就是将文字转变成可以编辑的形状,而且这个图形无论怎么放大都不会失真。
图1 字体为演示镇魂行楷 图2 字体为演示镇魂行楷 上面的两张图片,就是文字分别转成普通图片(JPG 或 PNG 格式)和矢量形状。
两者放大同样倍数之后,能够看到矢量化的文字即便放大很多倍,细节仍然清晰可见,但图片的话就变得很模糊。
02 应用
有时将文字矢量化对PPT演示有很大的作用。
1. 实现字体创作
现在都注重版权,很多字体也是这样,尤其是商用的字体。
如果随随便便就拿来用,说不定哪天就收到律师函警告了。
但是我们将文字矢量化,编辑文字的顶点,进行一定的变形,就不会有版权问题了。
字体为汉仪旗黑 具体操作:先将文字矢量化变成形状——选中,鼠标右键——编辑顶点。
编辑顶点 2. 解决字体缺失问题
有时,我们在自己的电脑上用了一些特殊的字体,没有办法嵌入到 PPT 里面,然后,放映的时候还不是用的自己的设备。
这个时候,有两种解决方案:
① 备份字体,安装到要放映的设备上。
② 将使用该字体的文字矢量化,或者转为图片(如果添加了放大动画,涉及像素的话,最好转为矢量图像)。
03 操作方法
1. 布尔运算
运用 PPT 自带的布尔运算,就可以将文字转化为图形,实现矢量化。
详细操作:插入文本框——输入一段文字——插入一个形状(矩形、圆形都可,是形状就行)——先选中文字,再按住 Ctrl 加选形状(顺序一定不要反了)——形状格式——合并形状——减除。
下面动图中,我为了操作方便快捷,将布尔运算放到了【自定义快速访问工具栏】。
布尔运算 2. 使用插件如果要追求速度的话,还可以使用插件来实现文字矢量化。
比如,下面这两款强大的插件:iSlide、OK插件。
(1) iSlide下载iSlide的官网:https://www.islide.cc/
iSlide 实现文字矢量化 (2) OK插件获取OK插件的官网:http://oktools.xyz/
操作:选中文字——一键特效——边缘裁除。
OK插件 实现文字矢量化 以上是 PPT 中实现文字矢量化及相关应用。
-
一个数里有那些约数用c++怎么做_两数的最大公约数你会求吗?(内附完整算法代码)...
2020-12-03 03:39:37两个数的最大公约数怎么求?思考题目的同时,我在这也顺便发出三个灵魂疑问?什么又是更相减损法?什么又是辗转相除法?什么又是欧几里得算法?不懂没关系,往下看要解决两数的最大公约数问题?,你首先要知道什么是两...两个数的最大公约数怎么求?
思考题目的同时,我在这也顺便发出三个灵魂疑问?
- 什么又是更相减损法?
- 什么又是辗转相除法?
- 什么又是欧几里得算法?
不懂没关系,往下看
- 要解决两数的最大公约数问题?,你首先要知道什么是两数的公约数
- 解释:
- 最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。
- 如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数。约数和倍数都表示一个整数与另一个整数的关系,不能单独存在。如只能说16是某数的倍数,2是某数的约数,而不能孤立地说16是倍数,2是约数
- ==例子:== 12、16的公约数有1、2、4,其中最大的一个是4,4是12与16的最大公约数,一般记为(12,16)=4。12、15、18的最大公约数是3,记为(12,15,18)=3。
那如何求呢?
其实这个问题的解法就在我开头提的三个疑问中。解决两数的最大公约数问题,可以有很多种方法,而上面提到的二种是最常见的(因为有一种是重复的)
画重点了:
欧几里得算法分析:1.欧几里德算法又称辗转相除法,简称gcd
2, 该算法原理:以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数
3.该算法证明:请同志们移至度娘gcd流程图:
如果gcd算法不好理解,那解决这道问题,可以直接用“枚举法”(也称为暴力算法)
枚举算法分析:
- 求a、b两个数的最大公因数。如果这两个数的最大公因数恰好是a、b其中一个,那肯定是a、b中较小者。==例如:== 2、4的最大公因数是2
- 那我们可以先求出a、b最小者,然后让a、b两数分别和最小者求余,直到a、b两数同时求余结果为0时就结束循环,否则最小值自减一,然后继续循环
上代码
Java大哥
1
Python新竞大哥
1
最后有兴趣一起交流的,可以关注我的公众号:这里你能够学到很实用的技巧,不是常用的我不说,年底还会抽奖送出我学过计算机相关专业的书籍福利。敬请期待!!!!
http://weixin.qq.com/r/SUiMlL-EuOLHrfv39x1b (二维码自动识别)
-
力扣 LeetCode 1553. 吃掉 N 个橘子的最少天数
2020-12-01 11:32:47需要解释一下,首先,要变为最小天数,意味着橘子要尽可能多的除以2或者除以3,那么自然而然就想到怎么让橘子变为2的倍数或者3的倍数,变为2的倍数需要的步数为n%2,然后变为n/2又需要一步,变为3的倍数同理,然后... -
jeecg-boot 动态表单实现网站快照截图
2020-07-09 18:01:00前端ant-design vue,后端jeecg-boot框架,直接使用vue截图还是很简单的,网上很多教程。简单分享一下。 首先根据要截图的元素(一般选一个html的...下面图片中的方法很简单,应该也不需要过多解释怎么使用。 问题在 -
数论 HDOJ 5407 CRB and Candies
2015-08-21 20:12:00题目传送门 ... 好吧,数论一点都不懂,只明白f (n + 1)意思是前n+1个数的最小公倍数,求法解释参考HDOJ 1019,2028 这个结论暂时不知道怎么推出来的,那么就是剩下1/(n+1) 逆元的求法了 代码: ... -
两数的最大公约数你会求吗?(内附完整java、python代码)
2020-02-06 22:08:13两个数的最大公约数怎么求? 思考题目的同时,我在这也顺便发出三个灵魂疑问? 什么又是更相减损法? 什么又是辗转相除法? 什么又是欧几里得算法? 不懂没关系,往下看 要解决两数的最大公约数问题?,你首先要知道... -
LeetCode 中级 - 阶乘后的零
2018-05-25 12:25:36阶乘后的零 给定一个整数 n,返回 n! 结果尾数中零的数量。 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零。...核心在于:怎么得到10? 答:2的倍数*5 其次,2和5谁出现的频率高? 答:显然是5,... -
计算a和b的所有公约数 c语言_两数的最大公约数你会求吗?(内附完整算法代码)...
2020-10-21 21:59:14两个数的最大公约数怎么求?思考题目的同时,我在这也顺便发出三个灵魂疑问?什么又是更相减损法?什么又是辗转相除法?什么又是欧几里得算法?不懂没关系,往下看要解决两数的最大公约数问题?,你首先要知道什么是两... -
2018 5 20
2018-05-20 21:43:43巧妙的转换,转换为一个二维数组求其相等两行的最大距离 hash poj3274 Gold Balanced Lineup ...我的想法是求如果不同位置的1出现的次数相等,则这个区间的数(十进制)相加就是2^n-1的倍数 问题是怎么求这个... -
2018 5 20 刷题记录
2018-05-20 21:44:00poj3274 Gold Balanced Lineup 巧妙的转换,转换为一个二维数组求其相等两行的最大距离 hash ... 解释的很清楚 我的想法是求如果不同位置的1出现的次数相等,则这个区间的数(十进制)相加就是...问题是怎么求这个区... -
struct内存对齐
2017-07-10 22:06:08关于C++中的struct内存对齐,应该也是初学者比较疑惑的一个知识点,但是搞清楚之后会发现非常简单,这里解释一下struct内存到底怎么对齐。 主要记住以下两点: 1.各成员变量存放的起始地址相对于结构的起始地址... -
OJ4008-糖果【各种dp之3】
2017-12-29 20:29:00就是一个英雄瞎搞之类为世界作出贡献,蓝后某zz公司免费给他糖,然后由于某些原因他只能拿能整除k数量糖果,然后每个盒子里有一定数量的糖果,拿了盒子就必须拿完里面所有的糖果,求他怎么拿的最多。 输入 5 7 ... -
解决ValueError: cannot reshape array of size 2328750 into shape (200,234,1)
2020-07-14 09:43:57报这种错误的原因主要是2328750 不等于三个数相乘的倍数(包括1倍),我碰到错之后,看了一下网上的解决方案好像都没有怎么说清楚这个问题,只简单解释了一下。 如导入数据后,原本的代码是: y_train = np.array... -
51nod 1068【简单博弈】
2016-10-23 19:36:53思路 手动打表, N 1 : A出1 A胜; ...6 : B胜(解释略);...最后会发现A不管怎么取也不会达到3的倍数,所以A赢两次后的第三次中,不可能取完以后,留给B是对方能赢(即A能赢)的阵式; -
C语言中结构体对齐
2018-06-25 15:58:45c语言中结构体会发生对齐,这点大多数人都清楚,其目的是为了让cpu存取数据更快,但是为了提高存取的速度制定的规则是怎么样的?一直没找到靠谱的解释,网上给的多种说法,总感觉有些牵强,有特别懂的同志烦请留言... -
hdu1089 Ignatius's puzzle
2017-10-16 13:38:00其实这道题不是很难,但是我刚开始拿到这道题的时候不知道怎么做, 因为这个式子我就不知道是干什么的: 65|f(x) 百度解释(若a/b=x...0 称a能被b整除,b能整除a,即b|a,读作“b整除a”或“a能被b整除”。a叫做b的... -
Java实现欧几里得算法
2020-09-16 21:26:05中学的时候虽然没怎么听说过欧几里得算法,但是肯定听说过辗转相除法:算法书中有了一个相对明确的解释: 两个整数x和y且x>y的最大公因子等同于y与x mod y(x除以y的余数)的最大公因子。数t整除x和y当且仅当t... -
KMP
2020-07-28 01:26:23至于KMP是怎么实现的, 以及代码的解释,这里借一下大佬的博客,大家可以去学习一下。KMP算法最浅显理解——一看就明白 这里引用例题 poj 1961 题意: 输出每个字符串从1 到 i 的前缀可以由一个字串循环多少次... -
Visual C++程序员实用大全(精华版).(水利水电.邓劲生.张晓明译).part3
2016-06-21 21:11:381 理解计算机是怎么运行程序的 2 运行一个已解释的程序 3 运行一个已编译的程序 4 C++在哪里 5 理解Visual c++中的程序文件 6 创建源代码文件 7 理解并创建头文件 第二章 结构和语法 8 理解计算机语言 9 理解计算机... -
Visual C++程序员实用大全(精华版).(水利水电.邓劲生.张晓明译).part4
2016-06-21 21:13:271 理解计算机是怎么运行程序的 2 运行一个已解释的程序 3 运行一个已编译的程序 4 C++在哪里 5 理解Visual c++中的程序文件 6 创建源代码文件 7 理解并创建头文件 第二章 结构和语法 8 理解计算机语言 9 理解计算机... -
Visual C++程序员实用大全(精华版).(水利水电.邓劲生.张晓明译).part1
2016-06-21 21:05:541 理解计算机是怎么运行程序的 2 运行一个已解释的程序 3 运行一个已编译的程序 4 C++在哪里 5 理解Visual c++中的程序文件 6 创建源代码文件 7 理解并创建头文件 第二章 结构和语法 8 理解计算机语言 9 理解计算机... -
Visual C++程序员实用大全(精华版).(水利水电.邓劲生.张晓明译).part2
2016-06-21 21:09:541 理解计算机是怎么运行程序的 2 运行一个已解释的程序 3 运行一个已编译的程序 4 C++在哪里 5 理解Visual c++中的程序文件 6 创建源代码文件 7 理解并创建头文件 第二章 结构和语法 8 理解计算机语言 9 理解计算机...
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
朱老师C++课程第3部分-3.6智能指针与STL查漏补缺
-
MMM 集群部署实现 MySQL 高可用和读写分离
-
企业常用应用框架.pdf
-
Windows系统管理
-
使用 Linux 平台充当 Router 路由器
-
PowerBI重要外部工具详解
-
AWS_Certified_Developer_Associate-Exam_Guide_EN_1.4.pdf
-
黑体使用说明书-V1.pdf
-
2.27比特币行情走势分析,暴涨暴跌,趋势改变吗?
-
Introducing the Facebook Field Guide to Machine Learning video series
-
PCI_Express_Basics_Background.pdf
-
genymotion插件-Android工具类资源
-
高级人工智能期末复习整理.pdf
-
事务
-
excel_test.zip
-
java多线程的api_Java多线程:实现API接口创建线程方式详解
-
java des 字符串_使用C# DES解密java DES加密的字符串
-
静态链接库制作示例.rar
-
cb不弹出控制台的方法.txt