Как проверить, будет ли квадратный корень числа рациональным? - PullRequest
10 голосов
/ 16 ноября 2011

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

Возможно ли это вообще?

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

Ответы [ 4 ]

6 голосов
/ 16 ноября 2011

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

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

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

3 голосов
/ 16 ноября 2011

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

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

2 голосов
/ 16 ноября 2011

После прочтения комментариев и ответов на другой вопрос С тех пор я задал вопрос, я понял, что проблема возникла из-за неточности с плавающей запятой, которая означала, что некоторые значения (например, 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");
}
1 голос
/ 16 ноября 2011

Если вы имеете дело с целыми числами, обратите внимание, что положительное целое имеет рациональный квадратный корень тогда и только тогда, когда имеет целое число квадратный корень, если это идеальный квадрат. Информацию о тестировании этого см. В этом удивительном вопросе StackOverflow .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...