Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2019
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.30 KB | None | 0 0
  1. #include <vector>
  2. #include <iostream>
  3. #include <cmath>
  4.  
  5. unsigned long long mulmod(unsigned long long a, unsigned long long b, unsigned long long mdlo) {
  6. a %= mdlo;
  7. b %= mdlo;
  8. if (a <= 0xFFFFFFF && b <= 0xFFFFFFF) {
  9. return (a * b) % mdlo;
  10. }
  11. unsigned int leadingZeros = 0;
  12. unsigned long long m = mdlo;
  13. while((m & 0x8000000000000000ULL) == 0) {
  14. leadingZeros++;
  15. m <<= 1;
  16. }
  17. unsigned long long mask = (1 << leadingZeros) - 1;
  18. unsigned long long result = 0;
  19. while(a > 0 && b > 0) {
  20. result += (b & mask) * a;
  21. result %= mdlo;
  22. b >>= leadingZeros;
  23. a <<= leadingZeros;
  24. a %= mdlo;
  25. }
  26. return result;
  27. }
  28.  
  29. unsigned long long powmod(unsigned long long base, unsigned long long expo, unsigned long long mdlo) {
  30. unsigned long long result = 1;
  31. while (expo > 0) {
  32. if (expo & 1) {
  33. result = mulmod(result, base, mdlo);
  34. }
  35. base = mulmod(base, base, mdlo);
  36. expo >>= 1;
  37. }
  38. return result;
  39. }
  40.  
  41. int main() {
  42. unsigned int N;
  43. std::cin >> N;
  44. const unsigned long long TenDigits = 10000000000ULL;
  45. unsigned long long sum = 0;
  46. for(unsigned int i = 1; i <= N; i++) {
  47. sum += powmod(i, i, TenDigits);
  48. }
  49. std::cout << (sum % TenDigits) << std::endl;
  50. return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement