2010-11-18 14 views
0

私はすべての親和性のあるペア(n、m)、n < m、2 < = n < = 650000と思われるコードを見てください。私のコード:http://tutoree7.pastebin.com/wKvMAWpT。見つかったペア:http://tutoree7.pastebin.com/dpEc0RbZ親和性のあるペアを見つけるためのコードを最適化する方法

私のノートパソコンでは、現在、追加の人数はそれぞれ24分かかります。私は、かなりの数のnが事前に除外されることが期待されています。これは近づくが、シガーはない:「5」で終わらない奇数n。これまでの反例対は1つしかありませんが、それは多すぎます:(34765731,36939357)。それはフィルタとして、すべてのnの40%をフィルタリングします。

私はいくつかのアイデアを期待していますが、必ずしもそれらを実装するためのPythonコードではありません。ここで

+0

あなたはオイラープロジェクトや他のコンテストのためにこれをやっていますか? –

+0

@ XML番号。最適化の練習として。今まで私はその機能を最適化するために働いていました。 – NotSuper

+1

これは非常に短いスニペットhttp://www.asahi-net.or.jp/~KC2H-MSM/mathland/math09/math09t1.htm –

答えて

0

は、それは1秒未満で10^9までのすべての友愛数を見つ​​けsample C++ code

finding amicable pairs

のためのすべての最適化技法をまとめた素晴らしい記事です。

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; 
} 
+0

質問者は、Pythonを使用していると言いました。その言語で回答するほうがよいでしょう。 :) – 2Cubed

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) 
関連する問題