Скорость python

Всем привет

Не смотря на все свои плюсы python, все же он уступает C++ …например в скорости.
Конечно, за счет оптимизации кода разницу можно сократить до минимума, но все же…
Вот пример программы, которая идет по всем числам от 1 до 10000000, и показывает совершенные числа и highly_composite числа (не знаю как по-русски). Много времени оптимизации не уделял, но даже несмотря на то,что код получился короче, работает python-программа на много медленнее.

Если есть python-программисты, помогите ускорить выполнение python-кода. Возможно для этой задачи подойдет другой алгоритм?

Код на python:

#!/usr/bin/python

c=0
print "1	 is highly composite number"

for i in range(1, 1000001):
        divisors=0
        a=0 
        for j in range(1,i):
                b=0 
                if i%j == 0:
                        a=a+1
                        divisors+=j
    
        if i==divisors:
                print i, "	 is perfect number" 
                b=1 
    
        if a>c:
                c=a 
                if b == 1:
                        print "	 and also highly composite number"
                else:
                        print i, "	 is highly composite number"

Код на С++:

#include <iostream>
using namespace std;

unsigned long i, j; //type for 10 000 000

int a=0, c=0, divisors;
bool b=false; //for both numbers

int main(int argc, char* argv])
{
cout << "1	 is highly composite number" << endl;
        for (i=1; i<=10000000; i++)
        {
                divisors=0;
                a=0;
                for (j=1; j<i; j++)
                        if (i%j==0)
                        {
                                a++; //how many divisors has every number
                                divisors+=j;
                        }

                if (i==divisors) //ok, it looks like "perfect number" (http://en.wikipedia.org/wiki/Perfect_number)
                {
                        cout << i << "	 is perfect number" << endl;
                        b=true;
                }

                if(a>c) //ok, it looks like "highly composite number" (http://en.wikipedia.org/wiki/Highly_composite_number)
                {
                        c=a;
                        if(b) //if both (perfect AND highly composite number)
                                cout << "	 and also highly composite number " << endl;

                        else//if highly composite number ONLY
                                cout << i << "	 is highly composite number" << endl;

                }
                b=false;
        }
return 0;
}

С уважением,
Alex

небольшая оптимизация твоего алгоритма повысит скорость примерно от 15 до 20 %


 print "1	 is highly composite number"
    t1, t2, t3, c = "	 and also highly composite number", "	 is highly composite number", "	 is perfect number", 0
    
    for i in xrange(1, 10001):
        a = divisors = b = 0
        
        for j in xrange(1,i):
            if i%j == 0:
                a+=1
                divisors+=j
    
        if i==divisors:
            print i, t3
            b=1 
    
        if a>c:
            c=a 
            print "%s" % t1 if b==1 else "%s%s" % (i, t2)

на будущее, использовать лучше xrange, в данном случаи дает прибавку скорости в 7-10 %

Вот еще один момент оптимизации, второй цикл можно сократить в половину, скорость от этого конечно же значительно вырастает =)


 print "1	 is highly composite number"
    t1, t2, t3, c = "	 and also highly composite number", "	 is highly composite number", "	 is perfect number", 0
    
    for i in xrange(1, 10001):
        a = divisors = b = 0
        
        for j in xrange(1,i/2 + 1):
            if i%j == 0:
                a+=1
                divisors+=j
    
        if i==divisors:
            print i, t3
            b=1 
    
        if a>c:
            c=a 
            print "%s" % t1 if b==1 else "%s%s" % (i, t2)

Очень красивый код, спасибо!

p.s.
Кстати, я создал группу в коннекте](https://connect.opensuse.org/pg/groups/11935/python/). Буду рад там всем python программистам.