fork download
  1. #include <stdio.h>
  2.  
  3. unsigned long PowMod(unsigned long p)
  4. {
  5. unsigned long prod;
  6.  
  7. if (p == 0)
  8. return 1;
  9. if (p == 1)
  10. return 2;
  11.  
  12. prod = PowMod(p / 2);
  13. prod = (unsigned long long)prod * prod % 1000000007ULL;
  14. if (p % 2 != 0)
  15. {
  16. prod = prod * 2 % 1000000007ULL;
  17. }
  18.  
  19. return prod;
  20. }
  21.  
  22. int main(void)
  23. {
  24. printf("%lu\n", PowMod(3));
  25. printf("%lu\n", PowMod(4));
  26. printf("%lu\n", PowMod(30));
  27. printf("%lu\n", PowMod(31));
  28. printf("%lu\n", PowMod(32));
  29. printf("%lu\n", PowMod(33));
  30. return 0;
  31. }
  32.  
Success #stdin #stdout 0s 1832KB
stdin
Standard input is empty
stdout
8
16
73741817
147483634
294967268
589934536