`
liuqing_2010_07
  • 浏览: 60573 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
1.如何计算闰年(Leap Year)?
  四年一闰;百年不闰;四百年再闰。
  具体参照:http://baike.baidu.com/view/3085625.htm
boolean isLeapYear(int year) {
	return (year%4 == 0 && year%100 !=0) || (year%400 == 0);
}


2.如何判断一个数是否是质数(Prime Number)?
  质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
  具体参照:http://baike.baidu.com/view/1767.htm
boolean isPrimeNumber(int n) {
	int n1 = (int) Math.sqrt(n);
	for (int i = 2; i <= n1; i++) {
		if(n%i == 0) {
			return false;
		}
	}
	return true;
}

  注:这里n必须大于1。

3.分解质因数(Decomposition of prime factors)。
  每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 分解质因数只针对合数。
  求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。短除法求质因数:

具体参照:http://baike.baidu.com/view/832102.htm#1
//返回质因数数组
Integer[] decPrime(int n) {
	List<Integer> list = new ArrayList<Integer>();
	for (int i=2;i <= n;i++){
		while(n != i){
			if(n%i != 0){
				break;//不能整除肯定不是因数,能够整除在这里一定是质数。因为所有的2,3,5,7
                      //都被除完之后。剩下的因数只能是奇数,且是质数。
			}
			list.add(Integer.valueOf(i));
			n = n/i;
		}
	}
	list.add(Integer.valueOf(n));
	return list.toArray(new Integer[list.size()]);
}


4.求两个数的最大公约数(Greatest Common Divisor)。
  如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。
  早在公元前300年左右,欧几里得就在他的著作《几何原本》中给出了高效的解法——辗转相除法。辗转相除法使用到的原理很聪明也很简单,假设用f(x, y)表示x,y的最大公约数,取k = x/y,b = x%y,则x = ky + b,如果一个数能够同时整除x和y,则必能同时整除b和y;而能够同时整除b和y的数也必能同时整除x和y,即x和y的公约数与b和y的公约数是相同的,其最大公约数也是相同的,则有f(x, y)= f(y, x%y)(y > 0),如此便可把原问题转化为求两个更小数的最大公约数,直到其中一个数为0,剩下的另外一个数就是两者最大的公约数。
  具体参照:http://baike.baidu.com/view/47637.htm
long gcd(long x,long y) {
	if(x < y) {
		long m = x;
		x = y;//x存储较大的一个数
		y = m;
	}
	long k = 0;
	while(y != 0) {
		k = x%y;
		x = y;
		y = k;
	}
	return  x;
}


5.求两个数的最小公倍数数(Least Common Multiple)。
  几个数公有的倍数叫做这几个数的公倍数,其中最小的一个公倍数,叫做这几个数的最小公倍数。自然数a、b的最小公倍数可以记作[a,b],自然数a、b的最大公因数可以记作(a,b),当(a,b)=1时,[a,b]= a×b。
  两个数的最大公因数和最小公倍数有着下列关系:
  最大公因数×最小公倍数=两数的乘积
  即(a,b)×[a,b]= a×b 。
  证明:设 a = x*(a,b),b = y*(a,b) 其中x,y不存在公约数。
        a * b = [x * (a,b)] * [y * (a,b)]
                 = [x * y * (a,b)] * (a,b)
                 = [a,b] * (a,b)
  具体参照:http://baike.baidu.com/view/341375.htm#2
long lcm(long x,long y) {
	return x*y/gcd(x,y);
}


6.求完数(Perfect Number)。
  完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3.(6的因子是1,2,3)
  具体参照:http://baike.baidu.com/view/640632.htm
  http://zjtys-2006.blog.sohu.com/164964518.html
boolean isPerfectNumber(long n) {
	int s = 0 ;
    //迭代求出所有因子之和
	for (int i = 1; i < n; i++) {
		if(n%i == 0) {
			s +=i;
		}
	}
    //判断该数是否等于它的因子之和,是则是完数。
	if( s == n) {
		return true;
	}
	return false;
}


7.水仙花数(Daffodils Number)。
  水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
具体参照:http://baike.baidu.com/view/152077.htm
//该算法使用的是基本数据类型,只能计算出少量“水仙花数”。建议感兴趣的读者用BigInteger来求“水仙花数”。
boolean isDaffodilsNumber(long l) {
	char [] c = String.valueOf(l).toCharArray();
	int d = 0,n = c.length;
	long sum = 0;
	for (int i = 0; i < c.length; i++) {
		d = c[i]-'0';
		sum += Math.pow(d, n);//可能存在精度丢失现象
	}
	if(sum == l) {
		return true;
	}
	return false;
}


8.回文数字(Palindrome Number)。
  若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:121,323.....
   判断一个数字是否是回文的方法如下:
boolean isPalindromeNumber(long l) {
	char [] c = String.valueOf(l).toCharArray();
	int len = c.length/2;
	for (int i = 0; i < len; i++) {
		if(c[i] != c[c.length-1-i]) {
			return false;
		}
	}
	return true;
}


9.牛顿迭代法求平方根(Newton's Method)。
  计算机本身不能开平方,开平方运算是用程序实现的。
  具体参照:http://baike.baidu.com/view/643093.htm#2
  http://wenku.baidu.com/view/6b74c622bcd126fff7050bfe.html
/**
 * 求平方根
 * @param d 待开方数
 * @param precision 算术平方根的精度
 * @return
 */
double sqrt(double d,double precision) {
	double x1 = d/2, x2 =(x1 + d/x1)/2;
	while(Math.abs(x2 -x1)>precision) {
		x1 = x2;
		x2 =(x1 + d/x1)/2;
	}
	return x1;
}


10.奇偶数快速判断(odd even)。
  判断奇数和偶数的方法,一般是除以2或者对2取模运算,结果为0则是偶数反之则是奇数。
在计算机内部数都是用二进制表示的,奇数最低位上一定是1,偶数为0。基于这个特点可以
利用按位与运算进行奇偶数判断。
//如果是奇数返回true,否则是偶数 则返回false。
boolean isOdd(long l) {
	if((l & 0x01) == 0) {
		return false;
	}
	return true;
}

  注:在计算机中 除法运算速度 < 模运算速度 < 按位与运算速度
  • 大小: 2 KB
1
0
分享到:
评论
1 楼 liuqing_2010_07 2012-10-04  
为了使代码更加简洁优雅。现做以下优化:
1.Perfect Number
//判断该数是否等于它的因子之和,是则是完数。  
10.    if( s == n) {  
11.        return true;  
12.    }  
13.    return false;

改为
    return (s == n);


2.Daffodils Number
10.    if(sum == l) {  
11.        return true;  
12.    }  
13.    return false;  

改为
    return (sum == l);


3.Odd Even number
1.//如果是奇数返回true,否则是偶数 则返回false。  
2.boolean isOdd(long l) {  
3.    if((l & 0x01) == 0) {  
4.        return false;  
5.    }  
6.    return true;  
7.}

改为
 boolean isOdd(long l) {
    return ((l & 0x01) == 1);
 }

相关推荐

    经典算法问题的java实现<二>

    【标题】:“经典算法问题的Java实现&lt;二&gt;” 在这个主题中,我们将深入探讨Java编程语言在解决经典算法问题上的应用。算法是计算机科学的基础,它们是解决问题的步骤和方法,而Java作为一种强大的面向对象的语言,...

    Genetic Algorithm遗传算法java GUI应用

    在"Genetic Algorithm遗传算法java GUI应用&lt;一&gt;"这个项目中,开发者已经完成了一个能够运行于Eclipse环境下的遗传算法实例。该程序具有一个基本的GUI界面,用户可以通过此界面观察算法的执行过程和结果。GA的过程...

    25个经典Spark算子的JAVA实现

    根据给定文件的信息,本文将详细介绍25个经典Spark算子的Java实现,并结合详细的注释及JUnit测试结果,帮助读者更好地理解Spark算子的工作原理及其应用方式。 ### Spark算子简介 在Apache Spark框架中,算子是用于...

    Java实现随机森林算法

    在Java中实现随机森林算法通常需要使用机器学习库,比如Weka或者Apache Spark的MLlib。下面我将展示一个使用Weka库的简单示例,来说明如何使用随机森林算法对数据进行分类。 首先,你需要在项目中引入Weka库。如果...

    jive.chm

    &lt;br&gt; 3 在java中编程实现数字签名系统 &lt;br&gt; 4 关于Jive1中的验证和相关类的调用 &lt;br&gt;&lt;br&gt; 5 MD5的加密算法(JavaScript) &lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;产品介绍&lt;br&gt; 1 Jive简介 &lt;br&gt;&lt;br&gt; Jive Forums&lt;br&gt; 1 Jive Forums特性 &lt;br...

    Russell And Norvig 的《人工智能 - 一种现代方法》中的算法的 Java 实现.zip

    Maven 信息(用于作为第三方库集成)&lt;dependency&gt; &lt;groupId&gt;com.googlecode.aima-java&lt;/groupId&gt; &lt;artifactId&gt;aima-core&lt;/artifactId&gt; &lt;version&gt;3.0.0&lt;/version&gt;&lt;/dependency&gt;已实现算法的索引数字 页 名称(第 3版...

    jLuhn:Luhn算法的Java实现

    Luhn算法的Java实现 将jLuhn添加到您的项目 玛文 添加以下存储库: &lt;repositories&gt; &lt;repository&gt; &lt;id&gt;jitpack.io&lt;/id&gt; &lt;url&gt;https://jitpack.io&lt;/url&gt; &lt;/repository&gt; &lt;/repositories&gt; 和以下依赖项: ...

    java实现排序算法

    Java作为广泛应用的编程语言,提供了一种高效的方式来实现各种排序算法。本文将深入探讨七种常见的排序算法及其在Java中的实现。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它重复地遍历待排序的...

    经典算法的Java实现.zip

    "经典算法的Java实现.zip"这个压缩包包含了一个PDF文档和一个readme文本,提供了Java语言实现的经典算法实例。 首先,我们要了解“排序”在计算机科学中的重要性。排序算法是数据处理的基础,它允许我们将一组无序...

    hadoop k-means算法实现(可直接命令行运行)

    hadoop k-means算法实现java工程的打包类,可直接在terminal中运行,运行命令为: $HADOOP_HOME/bin/hadoop jar ClusterDemo.jar main.Cluster 然后直接确定就可以看到提示的运行参数或者参考下面: +"&lt;input&gt; ...

    几个推荐算法的java实现

    本项目提供了一些推荐算法的Java实现,包括slopeone、SVD(奇异值分解)以及基于物品邻接的SVD(ItemNeighborSVD)。下面我们将详细探讨这些算法及其在Java中的实现。 1. **slopeone**: - Slope One是一种简单的...

    利用 First Fit 算法解决物流3D bin packing问题 Java实现

    本文将详细介绍First Fit算法以及其Java实现的关键点。 First Fit算法的基本思想是:对于每个待装物品,尝试将其放入当前可用的最小容积的箱子里。如果找不到合适的箱子,就创建一个新的箱子。这个策略相对简单,但...

    Java实现货郎担问题

    用佳点集实现遗传算法,解决货郎担问题,也就是Tsp问题,整个程序用Java实现,为便于学习,程序添加了详尽的注释,以及Javadoc帮助文档。整个程序只注重算法本身,没有添加任何包括图形界面在内的影响阅读的代码。...

    JAVA二维码算法实现

    以上就是使用Java实现二维码算法的基本流程。在实际应用中,我们可能还需要处理各种异常,优化二维码的尺寸、颜色、容错级别等参数,以及考虑在移动设备上的使用场景。这两个标签“QR码”和“JAVA”代表了这个主题的...

    装载问题-分支限界算法-java实现

    java实现的装载问题-分支限界算法是一种有效的解决方案,可以正确地解决装载问题,并输出最优的解决方案。该算法可以应用于物流行业、manufacturing行业等领域,对解决实际问题具有重要的参考价值。

    TFIDF算法 java实现

    ### TF-IDF算法Java实现详解 #### 一、算法简介 TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用于信息检索与文本挖掘中的权重计算公式。它通过统计单词在文档中出现的频率以及在整个文集中的频率...

    经典算法 C语言和Java实现

    经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法 C语言和Java实现经典算法...

Global site tag (gtag.js) - Google Analytics