Как проверить, будет ли квадратный корень числа рациональным?

Как вы можете проверить, будет ли квадратный корень числа рациональным или нет?

Это вообще возможно?

Мне это нужно, потому что мне нужно решить, отображать ли число как surd или нет в приложении математики, которое я разрабатываю в данный момент.

4 ответов


после прочтения комментариев и ответов на еще вопрос С тех пор я спросил, я понял, что проблема возникла из неточности с плавающей запятой, что означало, что некоторые значения (например, 0.01) не пройдут логический тест в конце программы. Я изменил его, чтобы использовать NSDecimalNumber вместо переменных.

double num, originalnum, multiplier;
int a;

NSLog(@"Enter a number");
scanf("%lf", &num);
//keep a copy of the original number
originalnum = num;

//increases the number until it is an integer, and stores the amount of times it does it in a
for (a=1; fmod(num, 1) != 0 ; a++) {
    num *= 10;
}

a--;
//when square-rooted the decimal points have to be added back in
multiplier = pow(10, (a/2));
if (fmod(originalnum, 1) != 0) {
    multiplier = 10;
}

NSDecimalNumber *temp = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithDouble:sqrt(num)/multiplier] decimalValue]];
NSDecimalNumber *result = [temp decimalNumberByMultiplyingBy:temp];
NSDecimalNumber *originum = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithDouble:originalnum] decimalValue]];

if ((fmod(sqrt(num), 1) == 0) && ([result isEqualToNumber:originum])) {
    NSLog(@"The square root of %g is %@", originalnum, temp);
}
else {
    NSLog(@"The square root of this number is irrational");
}

целое число входов, только квадратные корни из квадратных чисел являются рациональными числами. Так что ваша задача сводится найти, если ваш номер-это квадрат. Сравните вопрос: каков хороший алгоритм для определения того, является ли вход идеальным квадратом?.

Если у вас есть рациональные числа в качестве входных данных (то есть число, заданное как отношение между двумя целыми числами), проверьте, что как делитель, так и дивиденд являются идеальными квадратами.

для значения с плавающей запятой, вероятно, нет решения, потому что вы не можете проверить, является ли число рациональным с усеченным десятичным представлением.


с Википедия: квадратный корень из X является рациональной, если и только если x-рациональное число, которое может быть представлено как отношение двух квадратов.

поэтому вам нужно найти рациональное approxmiation для ввода номера. До сих пор единственный алгоритм, который я прибил, который выполняет эту задачу, написан в Saturn Assembler для серии калькуляторов HP48.


Если вы имеете дело с целыми числами, отметим, что положительное целое число имеет rational квадратный корень , если и только если Он имеет целое квадратный корень, то есть, если это идеальный квадрат. Для получения информации о тестировании для этого см. этот удивительный вопрос StackOverflow.