请参阅我用过的代码,找出我认为的所有Amicable Pairs(n,m),n< m,2< = n< = 6500万。我的代码:http://tutoree7.pastebin.com/wKvMAWpT。找到的对:http://tutoree7.pastebin.com/dpEc0RbZ。
我发现我的笔记本电脑上每增加一百万,现在需要24分钟。我希望有大量的n可以提前过滤掉。这很接近,但没有雪茄:奇数n不会以'5'结尾。到目前为止只有一个反例,但这太多了:(34765731,36939357)。作为过滤器将过滤掉所有n的40%。
我希望有一些想法,不一定是用于实现它们的Python代码。
答案 0 :(得分:0)
答案 1 :(得分: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;
}
答案 2 :(得分: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)