#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
int SimplifySquareRoot(int a, int *x, int *y){
int d, s;
*y = 1;
*x = a;
d = 4;
s = 2;
while (a >= d){
while (a % d == 0){
a /= d;
*x = a;
*y *= s;
}
d = d + 2 * s + 1;
s++;
}
}
int GetSquareRoot(int a, int *x, int *y, bool *NoSol){
if (a < 0)
*NoSol = true;
else if (a == 0){
*y = 0;
*x = 0;
}
else
SimplifySquareRoot(a, x, y);
}
void PrintSolution(int *x, int *y, bool *NoSol){
if (*NoSol)
else
if (*x == 0)
else
if (*x == 1)
else
if (*y == 1)
printf("x = +- Sqrt( %d %s\n", x
, ")"); else
printf("x = +- %d %s %d %s\n", y
, "Sqrt(", x
, ")"); }
int main() {
int a, x = 0, y = 0;
bool Solutions = false;
GetSquareRoot(a, &x, &y, &Solutions);
PrintSolution(&x, &y, &Solutions);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojaW5jbHVkZSA8c3RkbGliLmg+CgojaW5jbHVkZSA8c3RyaW5nLmg+CgojaW5jbHVkZSA8c3RkYm9vbC5oPgoKaW50IFNpbXBsaWZ5U3F1YXJlUm9vdChpbnQgYSwgaW50ICp4LCBpbnQgKnkpewogICAgaW50IGQsIHM7CiAgICAqeSA9IDE7CiAgICAqeCA9IGE7CiAgICBkID0gNDsKICAgIHMgPSAyOwogICAgd2hpbGUgKGEgPj0gZCl7CiAgICAgICAgd2hpbGUgKGEgJSBkID09IDApewogICAgICAgICAgICBhIC89IGQ7CiAgICAgICAgICAgICp4ID0gYTsKICAgICAgICAgICAgKnkgKj0gczsKICAgICAgICB9CiAgICAgICAgZCA9IGQgKyAyICogcyArIDE7CiAgICAgICAgcysrOwogICAgfQp9CgppbnQgR2V0U3F1YXJlUm9vdChpbnQgYSwgaW50ICp4LCBpbnQgKnksIGJvb2wgKk5vU29sKXsKICAgIGlmIChhIDwgMCkKICAgICAgICAqTm9Tb2wgPSB0cnVlOwogICAgZWxzZSBpZiAoYSA9PSAwKXsKICAgICAgICAgICAgICp5ID0gMDsKICAgICAgICAgICAgICp4ID0gMDsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBTaW1wbGlmeVNxdWFyZVJvb3QoYSwgeCwgeSk7ICAgCn0KCnZvaWQgUHJpbnRTb2x1dGlvbihpbnQgKngsIGludCAqeSwgYm9vbCAqTm9Tb2wpewogICAgICAgIGlmICgqTm9Tb2wpCiAgICAgICAgICAgIHByaW50ZigiTm8gU29sdXRpb25zIik7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgaWYgKCp4ID09IDApCiAgICAgICAgICAgICAgICBwcmludGYoInggPSAlZFxuIiwgMCk7CiAgICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAgICBpZiAoKnggPT0gMSkKICAgICAgICAgICAgICAgICAgICBwcmludGYoInggPSArLSAlZFxuIiwgeSk7CiAgICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgICAgIGlmICgqeSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInggPSArLSBTcXJ0KCAlZCAlc1xuIiwgeCwgIikiKTsKICAgICAgICAgICAgICAgICAgICBlbHNlIAogICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInggPSArLSAlZCAlcyAlZCAlc1xuIiwgeSwgIlNxcnQoIiwgeCwgIikiKTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgYSwgeCA9IDAsIHkgPSAwOwogICAgYm9vbCBTb2x1dGlvbnMgPSBmYWxzZTsKICAgIHByaW50ZigiYSA9ICIpOwogICAgc2NhbmYoIiVkXG4iLCAmYSk7CgogICAgR2V0U3F1YXJlUm9vdChhLCAmeCwgJnksICZTb2x1dGlvbnMpOwogICAgCiAgICBQcmludFNvbHV0aW9uKCZ4LCAmeSwgJlNvbHV0aW9ucyk7CgogICAgcmV0dXJuIDA7Cn0=