Number Scomposer in C/C++


SUBMITTED BY: Guest

DATE: May 6, 2013, 7:32 p.m.

FORMAT: C++

SIZE: 1.7 kB

HITS: 1400

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. /*
  5. TYPEDEFS & ENUMS
  6. */
  7. typedef unsigned int bool;
  8. enum boolstate
  9. {
  10. true = 1,
  11. false = 0
  12. };
  13. /*
  14. MY MATH FUNCTIONS
  15. */
  16. bool isPrime(long int num)
  17. {
  18. bool r = true;
  19. int i;
  20. for (i = 2; i < num; i++)
  21. {
  22. if ((num % i) == 0) r = false;
  23. }
  24. return r;
  25. }
  26. bool isDivisor(const long int div, const long int num)
  27. {
  28. if ((num % div) == 0) return true; else return false;
  29. }
  30. /*
  31. MAIN
  32. */
  33. int main(void)
  34. {
  35. long int n;
  36. long int i;
  37. long int d;
  38. int j;
  39. int tmp;
  40. long int r[24][2];
  41. long int rn;
  42. printf("\n Number Scomposer\nwritten in C by Gi@cky98\n\nUsage: write number to scompose. Write 0 to exit.\n\n");
  43. begin:
  44. printf("Number to scompose: ");
  45. scanf("%i", &tmp);
  46. n = (long int)tmp;
  47. if (!n) return 0;
  48. for (i = 0; i < 24; i++)
  49. {
  50. r[i][0] = 0;
  51. r[i][1] = 0;
  52. }
  53. rn = 0;
  54. while (n != 1)
  55. {
  56. for (i = 2; i <= n; i++)
  57. {
  58. if ((isPrime(i) == true) && (isDivisor(i, n) == true))
  59. {
  60. tmp = 0;
  61. n = n / i;
  62. for (j = 0; j < rn; j++)
  63. {
  64. if (r[j][0] == i) { r[j][1]++; tmp = 1; break;}
  65. }
  66. if (!tmp) { r[rn][0] = i; r[rn][1]++; rn++; }
  67. }
  68. }
  69. }
  70. printf("Result: %i^%i", (int)r[0][0], (int)r[0][1]);
  71. for (j = 1; j < rn; j++)
  72. {
  73. printf(" * %i^%i", (int)r[j][0], (int)r[j][1]);
  74. }
  75. printf("\n\n");
  76. goto begin;
  77. return 0;
  78. }

comments powered by Disqus