探秘ADO数据库访问技术有关信息
2012-07-23 11:00
295 查看
不管求最大公约数或最小公倍数,最佳途径都是先对正整数进行质因数分解。把两个数(op1, op2)的相同的所有质因数全找出来,它们的乘积就是最大公约数GCD,而GCD* (op1/GCD) * (op2/GCD)就是最小公倍数(LCM)。
第一步,先进行质因素分解。
1) 实现一个寻找质数的函数
2)找出小于op1,op2的所有质数。
3) 用试除法求op1, op2的质因数,即用以上找出的质数逐一地去试除op1, op2,以判断哪些质数是它们的因数;试除到正平方根便可得出所有的质因数。
4) 求最大公约数与最小公倍数
第一步,先进行质因素分解。
1) 实现一个寻找质数的函数
def isPrime(self, op): isPrime=True; sqrRoot=int(math.sqrt(op)); #if op==2: return True; for div in range(2,sqrRoot+2): if 0==op%div and div<op: isPrime=False; break; return isPrime; def findPrimeList(self, op): liPrime=[]; for num in range(2,op+1): if self.isPrime(num): liPrime.append(num); return liPrime;
2)找出小于op1,op2的所有质数。
3) 用试除法求op1, op2的质因数,即用以上找出的质数逐一地去试除op1, op2,以判断哪些质数是它们的因数;试除到正平方根便可得出所有的质因数。
def primeFactorize(self, op1): '''Find prime factors for op1.''' liPrimeFactors=[]; sqrRoot=int(math.sqrt(op1)); #liPrimes=self.findPrimeList(sqrRoot+1); liPrimes=self.findPrimeList(op1); while True: for div in liPrimes: if 0==op1%div: liPrimeFactors.append(div); op1=op1/div; break; if op1==1: break; if div==liPrimes[len(liPrimes)-1]: break; return liPrimeFactors;
4) 求最大公约数与最小公倍数
def calGCDAndLCM(self, op1, op2): liCommonFactors=[1]; liPrimeFactors1=self.primeFactorize(op1); liPrimeFactors2=self.primeFactorize(op2); print liPrimeFactors1; print liPrimeFactors2; for p in liPrimeFactors2: if True==self.binSearch(liPrimeFactors1, p): liPrimeFactors1.remove(p); liCommonFactors.append(p); product=1; lcm = 1; for f in liCommonFactors: product*=f; self.gcd = product; self.lcm = op1 * (op2/product);
相关文章推荐
- ODBC OLEDB ADO等数据库访问技术
- ADO.NET(数据库访问技术)
- VC++数据库技术系列(二)ADO数据库访问技术概述
- 数据库访问技术之ADO
- VC下使用ADO数据库访问技术时遇到的问题
- ADO.NET数据库访问技术(转)
- ADO技术访问数据库
- 有关访问数据库ADO
- MFC连接到SQL(ADO数据库访问技术)——表的查询,添加,删除
- VC中使用ADO访问数据库技术程序实现方法
- 使用ADO技术访问SQL 数据库
- 黑马程序员--ADO.NET数据库访问技术(一)
- ADO数据库访问技术总结
- VC数据库访问技术之ADO
- 数据库访问技术(二)---ADO.NET
- 黑马程序员--ADO.NET数据库访问技术(二)
- C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看
- VC中使用ADO访问数据库技术程序实现方法
- ADO数据库访问技术使用的基本步骤及方法:
- ADO.NET数据库访问技术