问题描述如下:
“当一个数跟其真因子相加之和相等,那就称之为完美数(profect number)
如果一个数比其真因子相加之和还大,那就称之为亏数(deficient number),如果比真因子相加还小,那就称之为盈数(abundant number)。
12是最小的盈数,1+2+3+4+6=16>12.最小的两个盈数相加的正整数是14,我们可以知道大于28123的正整数都可以被两个盈数相加得到。
求不能被两个盈数相加的正整数之和?”
代码实现如下:
/**
* n的真因子之和
*
* @param n
* @return
*/
private static int sumOfFactors(int n) {
int result = 0;
for (int i = 1; i < n; i++) {
if (n % i == 0) {
result += i;
}
}
return result;
}
/**
* n是否是盈数
*
* @param n
* @return
*/
private static boolean isAbundantNumber(int n) {
return n < sumOfFactors(n);
}
/**
* 28123以下盈数数组
*
* @return
*/
private static List<Integer> getAbundantNumbers() {
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i < limit; i++) {
if (isAbundantNumber(i)) {
list.add(i);
}
}
return list;
}
/**
* 不能被两个盈数相加的正整数之和
* @return
*/
private static int sum() {
int sum = 0;
List<Integer> list = getAbundantNumbers();
for (int i = 1; i < limit; i++) {
boolean flag = false;
for (int number : list) {
if (number > i / 2) {
break;
}
int temp = i - number;
if (list.contains(temp)) {
flag = true;
break;
}
}
if (!flag) {
sum += i;
}
System.out.println(i);
}
return sum;
}
private static final int limit = 28123;
可以得到答案:4179871
效率比较差,太困就不想优化了,有空再想,今天练一个就先睡了^_^
请不吝赐教。
@anthor ClumsyBirdZ
分享到:
相关推荐
在计算机科学和数学中,计算从n个正整数中选择k个数的不同组合数是一项基本的任务,这涉及到组合数学中的组合(Combination)概念。组合是指从一个集合中不考虑顺序取出k个元素的方法数,它与排列(Permutation)...
标题中的“一个数分成几个连续整数和”指的是在数学领域中的一种问题类型,它涉及到将一个给定的正整数表示为若干个连续整数的和。这种问题在算法设计、数学竞赛以及数据分析中都有可能出现。连续整数和的问题通常...
两个十以内的整数相加
这篇博客文章“(数据结构与算法)两个大整数相加”提供了一个解决方案来应对这个问题。 首先,我们需要理解如何存储大整数。在大多数编程语言中,内置的整数类型如int或long通常有最大值限制,对于超出这些范围的...
本程序实现了两个无限长的正整数相加减,使用数组实现。
问题描述是:给定一个非负整数 `num`,我们需要反复地将它的各个位上的数字相加,直至得到一个一位数。例如,对于输入值 38,经过计算 3 + 8 = 11,再计算 1 + 1 = 2,最后我们得到的结果是 2,因此返回 2。 解决...
我们经常遇到两多项式相加的情况,在这里,我们就需要用程序来模拟实现把 两个多项式相加到一起。首先,我们会有两个多项式,每个多项式是独立的一行,每个多项式由系数、幂数这样的多个整数对来表示。 如多项式2x20...
# 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 # 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 # 输入示例 # 输入:target = 9 # 输出:[[2,3,4],[4,5]...
python编写程序,生成10个随机整数,其中的奇数相加,偶数相加,结果进行输出两个和。
实现2个80位左右的大数相加,暂时不支持负数,只支持正整数。
c语言 利用字符数组实现两个大整数的加减法.exe
问题描述要求我们将两个表示大整数的字符串相加,并返回它们的和,也是以字符串形式表示。下面我们将详细探讨这个问题的解决方案及其涉及的知识点。 首先,我们要理解输入是两个字符串,它们分别存储了两个正整数。...
最优分解问题是一个经典的数学优化问题,它涉及到如何有效地将一个正整数n分解为若干个互不相同的自然数之和,以使得这些自然数的乘积最大化。这个问题在计算机科学和算法设计中有着广泛的应用,特别是在寻找高效...
实验一:线性表的应用算法:构造一个递增有序的正整数链表,实现链表分解为一个奇数表和一个偶数表,之后再将两个链表合并一个递减链表。 实验二:线性表的应用算法:构造两个按指数递增的有序链表,实现两个一元...
当一个数的所有位都入栈后,另一个数的剩余位仍需与前一个数的进位相加。这个过程可以迭代直到没有更多的位或没有进位。最后,如果还有进位,需要将它作为结果的最前面一位。 以下是超长整数加法的基本步骤: 1. ...
之所以使用补码,是因为如果不使用补码,直接通过符号位表示负数,会导致在进行加减运算时需要额外判断和转换,这会增加计算复杂度,影响性能。而补码使得正负数的加减法运算规则保持一致,简化了计算过程。 接下来...
数组的每个元素代表大数的一部分,例如,一个数组可以表示一个正整数,数组中的元素从低位到高位依次存储每一位数字。 1. 大数的表示: 我们可以定义一个结构体来表示大数,结构体包含一个整型数组和数组长度两个...
”简单来说,就是所有偶数(除了2本身)都能被看作两个质数相加的结果。例如,6=3+3,10=3+7,14=3+11等。 **质数的概念** 在数学中,质数是大于1且只有1和其本身两个正因子的自然数。换句话说,如果一个数只有两...
如果两个链表的长度不一致,则继续遍历较长的链表,并将剩余部分与进位相加。 ```c struct Long *add(struct Long *p, struct Long *q) { // ... (省略部分代码) } ``` #### 2.4 输出结果 `print()`函数用于打印...
标题中的"数的划分1"指的是数学中的一种问题,它涉及到将一个正整数分成若干个正整数的和。这种问题在计算机科学和算法设计中具有重要意义,因为它经常出现在组合优化、动态规划和递归算法等场景下。在描述中,我们...