0

请查看我用来查找我认为所有 Amicable Pairs (n, m), n < m, 2 <= n <= 6500 万的代码。我的代码:http ://tutoree7.pastebin.com/wKvMAWpT 。找到的对:http ://tutoree7.pastebin.com/dpEc0RbZ 。

我发现在我的笔记本电脑上每增加一百万现在需要 24 分钟。我希望有大量的 n 可以提前过滤掉。这很接近,但没有雪茄:不以“5”结尾的奇数 n。到目前为止,只有一对反例,但数量太多了:(34765731, 36939357)。那作为过滤器将过滤掉所有 n 的 40%。

我希望有一些想法,不一定是用于实现它们的 Python 代码。

4

3 回答 3

0

这是一篇很好的文章,它总结了寻找友好配对的所有优化技术

带有示例 C++ 代码

它可以在不到一秒的时间内找到高达 10^9 的所有友好数字。

于 2015-11-24T10:23:00.760 回答
0
#include<stdio.h>
#include<stdlib.h>
int sumOfFactors(int );

int main(){
    int x, y, start, end;
    printf("Enter start of the range:\n");
    scanf("%d", &start);
    printf("Enter end of the range:\n");
    scanf("%d", &end);

    for(x = start;x <= end;x++){
        for(y=end; y>= start;y--){
            if(x == sumOfFactors(y) && y == sumOfFactors(x) && x != y){
                printf("The numbers %d and %d are Amicable pair\n", x,y);
            }
        }
    }   
    return 0;
}

int sumOfFactors(int x){
    int sum = 1, i, j;
    for(j=2;j <= x/2;j++){
        if(x % j == 0)
            sum += j;
    }
    return sum;
}
于 2016-07-30T04:40:52.503 回答
0
def findSumOfFactors(n):
    sum = 1
    for i in range(2, int(n / 2) + 1):
        if n % i == 0:
            sum += i
    return sum

start = int(input())
end = int(input())

for i in range(start, end + 1):
    for j in range(end, start + 1, -1):
        if i is not j and findSumOfFactors(i) == j and findSumOfFactors(j) == i and j>1:
            print(i, j)
于 2016-08-11T03:48:43.380 回答