int checkdiv(int num)
{
int SqrtOfnumber,i;
SqrtOfnumber=sqrt(num);
int counter=1;
for(i=2;i<SqrtOfnumber;i++)
{
if(num%i==0)
counter++;
}
counter=counter *2;
if(i*i == num)
counter++;
return counter;
}
** В случаите на 2 числа има един и същ брой делители, изходът трябва да е този с най-малка стойност
Примери за въвеждане
2 \ test cases
1 10
1000 2000
Очакван резултат
Between 1 and 10, 6 has a maximum of 4 divisors.
Between 1000 and 2000, 1680 has a maximum of 40 divisors.
Горният код изход
Between 1 and 10, 10 has a maximum of 4 divisors.
Between 1000 and 2000, 1680 has a maximum of 38 divisors.
Функцията връща фалшивия брой делители, докато останалата част от кода работи коректно, Как мога да го поправя?
входът е число, което искам да проверя колко делители има и изхода в броя на делителите
Отговори:
0 за отговор № 1Решението на проблема е използването двойно за SquarOfnumber
int checkdiv(int x)
{
double SqrtOfnumber;
SqrtOfnumber=sqrt(x);
int counter=1,i;
for(i=2;i<SqrtOfnumber;i++)
{
if(x%i==0)
counter++;
}
counter=counter*2;
if(i*i == x)
counter++;
return counter;
}