Informatică, întrebare adresată de 24cosmin24, 9 ani în urmă

Cerinţa

Se citește un număr natural n. Să se determine suma divizorilor impari ai săi.
EU AM SCRIS ASTA:
#include
#include
using namespace std;

int sumimpdiv(int x)
{int d,s=0;
for(d=1;d<=x;d++)
if(x%d==0&&d%2==1)
s=s+d;
return s;
}
int main()
{int x;
cin>>x;
cout< return 0;
}
IAR PROBLEMA MEA E LIMITA DE TIMP DAU COROANA


Rayzen: Si scurtezi jumatate din timp.
Rayzen: dar nu cred ca ajuta asa mult.
Rayzen: nvm
Rayzen: Incearca-l pe acesta
Rayzen: #include<iostream>
using namespace std;

int sumimpdiv(int x)
{ int d,s=0;
for(d=1;d<=x/2;d++)
{
if(x%d==0&&d%2==1)
s=s+d;
}
if(x%2 != 0) {s = s+x;}
return s;
}
int main()
{int x;
cin>>x;
cout<<sumimpdiv(x);
}
Rayzen: Ar trebui sa scurteze
Rayzen: nu e nevoie sa cautam divizori mai mari decat x/2
Rayzen: Ci doar de x, daca trece de x/2.
Rayzen: doar pe x*

Răspunsuri la întrebare

Răspuns de uleiaalex
0
Am revenit cu problema in varianta C++. Sper ca te-am ajutat.Am facut-o pe un compilator online. Dupa mine e cel mai bine optimizata.Nu uita daca te-am ajutat sa imi dai o coronita. Tot respectul.

#include <iostream>#include <math.h>
using namespace std;
int sumimpdiv(int x)
{
    int s=0;
    if(x == 1)
        s =1;
    else
    {
        for(int d=1;d<=sqrt(x)+1;d=d+2)
        if(x%d==0&&d%2==1)
        {
            s=s + d + (x/d);
            if((x/d)%2!=1 || (x/d) == d)
                s-=(x/d);
        }
        cout<<endl;
    }
    return s;
}
int main()
{
    int x;
    cin>>x;
    cout<<endl;
    cout<<sumimpdiv(x);
    return 0;
}
Alte întrebări interesante