fork(1) download
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. using namespace std;
  6. double pow_b (double a, int n){
  7. if (n==0) return 1;
  8. double result = 1;
  9. while (n>0) {
  10. if (n%2==0) {
  11. n/=2;
  12. a*=a;
  13. }
  14. else {
  15. n--;
  16. result*=a;
  17. }
  18. }
  19. return result;
  20. }
  21. int main () {
  22. double a, p, eps=0.00001; //инициализируем переменные и задаём погрешность
  23. cin>>a>>p;
  24. double x=pow(a, 1/p); //подсчитываем значение
  25. double xn=a, x_prev;
  26. int i=0;
  27. while (fabs(x-xn) > eps){ //создаём цикл, котоый считает значение с помощью рекурентного соотношения Ньютона
  28. x_prev=xn;
  29. xn=(1/p)*(x_prev*(p-1) + a/(pow_b(x_prev, p-1)));
  30. i++;
  31. }
  32. cout<<i<<' '<<xn<<' '<<x; //выводим количество итераций на экран.
  33. return 0;
  34. }
  35.  
Success #stdin #stdout 0s 3476KB
stdin
9 3
4 2
stdout
7 2.08008 2.08008