Advertisement
Korobka887

T02D04Q1

Mar 2nd, 2023
663
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.09 KB | None | 0 0
  1. #include <math.h>
  2. #include <stdio.h>
  3.  
  4. int remain(int a, int div) {
  5.   while (a >= div) {
  6.     a -= div;
  7.   }
  8.   return a;
  9. }
  10.  
  11. int divide(int num, int div) {
  12.     int count = 0;
  13.     while num > 0 {
  14.         num -= div;
  15.         count += 1;
  16.     }
  17.     return count;
  18. }
  19.  
  20. int simple(int num) {
  21.   int flag = 1;
  22.   for (int div = 2; div < (int)sqrt(num) + 1; ++div) {
  23.     flag = remain(num, div) == 0 ? 0 : flag;
  24.     flag = remain(num, divide(num, div)) == 0 ? 0 : flag;
  25.   }
  26.   return flag;
  27. }
  28.  
  29. int max_simp_div(int num) {
  30.   num *= num < 0 ? -1 : 1;
  31.  
  32.   int result = 0;
  33.   if (simple(num) == 0) {
  34.     for (int i = 2; i < (int)sqrt(num) + 1; ++i) {
  35.       if (remain(num, i) == 0) {
  36.         result = i > result && simple(i) == 1 ? i : result;
  37.         result = divide(num, i) > result && simple(divide(num, i)) == 1 ? divide(num, i) : result;
  38.       }
  39.     }
  40.   } else {
  41.     result = num;
  42.   }
  43.   return result;
  44. }
  45.  
  46. int main() {
  47.   char c;
  48.   double a;
  49.  
  50.   if (scanf("%lf%c", &a, &c) == 2 && (int)a == a && c == '\n') {
  51.     printf("%d", max_simp_div((int)a));
  52.   } else {
  53.     printf("n/a");
  54.   }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement