fork download
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. #define MAXLEN 801
  5. char str[MAXLEN];
  6. long long n,e;
  7. int len;
  8.  
  9. long long Mod_solution(long long a, long long b)
  10. {
  11. long long result= 1;
  12. if(b==0) return 1;
  13. if(b==1) return a%n;
  14. result=Mod_solution(a,b>>1);
  15. result=result*result%n;
  16. if (b&0x1) result=result*a%n;
  17. return result;
  18. }
  19.  
  20.  
  21. void Pre_Operate()
  22. {
  23. int k1,j;
  24. for(k1=j=0;str[j]!='\0';j++)
  25. {
  26. if('a'<=str[j]&&str[j]<='z') str[k1++]=str[j]-32;
  27. else if('A'<=str[j]&&str[j]<='Z') str[k1++]=str[j];
  28. }
  29. str[k1]='\0';
  30.  
  31. }
  32.  
  33. long long int Encryption(int t)
  34. {
  35. int i;
  36. long long sum=0,fsum=1,result=0,k=1;
  37. for(i=t;i>=t-3;i--)
  38. {
  39. sum+=(str[i]-'A')*k;
  40. k*=100;
  41. }
  42. //while(e1>0){ fsum*=sum; fsum%=n; e1--;}
  43. fsum=Mod_solution(sum,e);
  44. return fsum;
  45. }
  46.  
  47. void print(long long s)
  48. {
  49. int i=0,j;
  50. long long t=s;
  51. while(t!=0)
  52. {
  53. i++;
  54. t/=10;
  55. }
  56. for(j=0;j<8-i;j++) printf("0");
  57. printf("%lld",s);
  58. }
  59.  
  60. int main()
  61. {
  62. int r,d,i,s=3,l;
  63. long long result;
  64. scanf("%d %d\n",&n,&e);
  65. gets(str);
  66. Pre_Operate();
  67. len=strlen(str);
  68. l=len;
  69. while(l>=4)
  70. {
  71. result=Encryption(s);
  72. s+=4;
  73. l-=4;
  74. print(result);
  75. }
  76. if(l>0)
  77. {
  78. for(i=len;i<=(len/4+1)*4-1;i++) str[i]='Z';
  79. result=Encryption((len/4+1)*4-1);
  80. print(result);
  81. }
  82. }
Success #stdin #stdout 0s 9432KB
stdin
88115513 12167
discrete mathematics and its applications
stdout
12031906821174407511841655736224651001145591642644698137000140725612488080678538