--------------------------校验:_____________-----------------------日期:_____________VB算法总结VB算法总结:1、最大公约数算法说明1) 最大公约数: 用辗转相除法求两自然数m、n的最大公约数。(1) 首先,对于已知两数m、n,比较并使得m>n;(2) m除以n得余数r;(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行步骤(4)(4) mßnnßr再重复执行(2)譬如: 10与5分析步骤: m=10n=5 r=mmodn=0 所以n(n=5)为最大公约数 24与9分析步骤: m=24n=9 r=mmodn=6 r≠0m=9n=6 r=mmodn=3 r≠0m=6n=3 r=mmodn=0 所以n(n=3)为最大公约数算法实现PrivateFunctionGCD(ByValmAsLong,ByValnAsLong)AsLongDimtempAsLongIfm<nThentemp=m:m=n:n=tempDimrAsLongDor=mModnIfr=0ThenExitDom=nn=rLoopGCD=n EndFunction2) 最小公倍数 m×n÷最大公约数3) 互质数 最大公约数为1的两个正整数2、素数算法说明素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。判别某数m是否是素数的经典算法是:对于m,从I=2,3,4,……,m-1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m是素数。PrivateFunctionprime(ByValn%)AsBooleanDimi%prime=trueFori=2Tosqr(n) IfnModI=0Then Prime=falseExitFor endifNextIEndFunction3、进制转换算法说明1) 十进制正整数m转换为R(2-16)进制的字符串。 思路:将m不断除r取余数,直到商为0,将余数反序即得到结果。 算法实现:PrivateFunctionTran(ByValmAsInteger,ByValrAsInteger)AsStringDimStrDtoRAsString,nAsIntegerDoWhilem<>on=mModrm=m\rIfn>9ThenStrDtoR=Chr(65+n-10)&StrDtoRElseStrDtoR=n&StrDtoREndIfLoopTran=StrDtoREndFunction 2) R(2-16)进制字符串转换为十进制正整数。 思路:R进制数每位数字乘以权值之和即为十进制数。 算法实现:PrivateFunctionTran(ByValsAsString,ByValrAsInteger)AsintegerDimnAsInteger,decAsIntegers=UCase(Trim(s))Fori%=1ToLen(s) IfMid(s,i,1)>="A"Then n=Asc(Mid(s,i,1))-Asc("A")+10 Else n=Val(Mid(s,i,1)) EndIf dec=dec+n*r^(Len(s)-i)NextiTran=decEndFunction4、排序问题(1).选择排序法(升序)基本思想:1)对有n个数的序列(存放在数组a(n)中),从中选出最小的数,与第1个数交换位置;2)除第1个数外,其余n-1个数中选最小的数,与第2个数交换位置;3)依次类推,选择了n-1次后,这个数列已按升序排列。 Optionbase1Subsort(a()asinteger) Dimi%,j%,t%,p%,n% N=ubound(a)Fori=1Ton-1 p=i Forj=i+1Ton Ifa(j)>a(p)Thenp=j Nextj t=a(i) a(i)=a(p) a(p)=(升序)基本思想:(将相邻两个数比较,小的调到前头)1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”;2)第二趟对余下的n-1个数(最大的数已“沉底”)按上法比较,经n-2次两两相邻比较后得次大的数;3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。程序段如下Subsort(a()asinteger) Dimi%,j%,n%,t% n=ubound(a)Fori=1Ton-1 Forj=1Ton-i Ifa(j)>a(j+1)Then tem
VB算法总结 来自淘豆网www.taodocs.com转载请标明出处.