实验内容:
1、设计一个工具类Utils,该类中包括一个方法:IsPerNum方法用于判断一个给定数值是否是完全数,实现该算法,并计算10000以内的所有完全数
(说明:完全数是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28)
2、在此工具类中增加一个方法ComputeGDC,用于计算两个数的最大公约数,如果有,则返回最大公约数;如果没有,则抛出自定义异常GCDException
//lsy
package java_experiments;
public class seven {
public static void main(String[] args) {
Utils utils = new Utils();
utils.IsPerNum(28);
utils.IsPerNum(29);
utils.AllPerNum(1000);
try {
utils.ComputeGDC(13, 12);
utils.ComputeGDC(-13, 12);
} catch (GCDException e) {
e.toString();
}
}
}
@SuppressWarnings("serial")
class GCDException extends Exception {
public GCDException() {
System.out.println("ERROR");
}
}
class Utils {
public void IsPerNum(int num) {
int add = 0;
for (int i = 1; i < num; i++) {
if (num % i == 0)
add += i;
}
if (add == num)
System.out.println(num + "是完全数");
else
System.out.println(num + "是非完全数");
}
public void AllPerNum(int num) {
int count = 0;
System.out.println(num + "以内的完全数有:");
for (int i = 1; i <= num; i++) {
int sum = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0)
sum += j;
}
if (sum == i) {
count++;
System.out.print(i + " ");
}
}
System.out.println("\n" + num + "以内共" + count + "个完全数");
}
public void ComputeGDC(int a, int b) throws GCDException {
if (a < 0 || b < 0) {
throw new GCDException();
} else {
System.out.print(a + "与" + b + "的最大公约数:");
if (a < b) {
int temp = a;
a = b;
b = temp;
}
while (a % b != 0) {
int temp = a % b;
a = b;
b = temp;
}
System.out.println(b);
}
}
}