比赛 noip 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 __完全平方数 最终得分 100
用户昵称 Kulliu 运行时间 1.212 s
代码语言 C++ 内存使用 1.02 MiB
提交时间 2016-11-04 21:22:33
显示代码纯文本
  1. #include<algorithm>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<vector>
  6. #include<cstdio>
  7. #include<cctype>
  8. #include<ctime>
  9. #include<cmath>
  10. #include<queue>
  11. #include<list>
  12. #include<map>
  13. #include<set>
  14. using namespace std;
  15. typedef long long ll;
  16. #define INF 0x7fffffff
  17. #define F(i,l,r) for(int i=l;i<=r;i++)
  18. #define D(i,r,l) for(int i=r;i>=l;i--)
  19. #define rep(i,n) for(i=1;i<=n;i++)
  20. const int maxn=5000100;
  21. const int mod=100000007;
  22. bool zs[maxn];
  23. int n;
  24. void mk()
  25. {
  26. scanf("%d",&n);
  27. int i,j;
  28. for(i=2;i<=n/2+1;i++)
  29. {
  30. if(!zs[i])
  31. {
  32. for(j=2; i*j <=n;j++)
  33. zs[i*j]=1;
  34. }
  35. }
  36. }
  37. ll qh(ll v)
  38. {
  39. ll ans=0;
  40. ll x=n;
  41. for(;x;x/=v,ans+=x);
  42. return ans;
  43. }
  44. ll ksm(int a,ll b)
  45. {
  46. ll ans=1,x=a%mod;
  47. for(;b;b/=2,x=(x*x)%mod)
  48. if(b&1)
  49. ans=(ans*x)%mod;
  50. return ans;
  51. }
  52. void solve()
  53. {
  54. ll j,sum,ans=1;
  55. int i;
  56. for(i=2;i<=n/2+1;i++)
  57. {
  58. if(!zs[i])
  59. {
  60. j=0;
  61. sum=qh(i);
  62. if(sum&1) sum--;
  63. if(sum!=0)
  64. j=ksm(i,sum);
  65. if(j!=0)
  66. ans=(ans*j)%mod;
  67. }
  68. }
  69. printf("%I64d\n",ans);
  70. }
  71. int Main(){
  72. freopen("xnumber.in","r",stdin);
  73. freopen("xnumber.out","w",stdout);
  74. mk();
  75. solve();
  76. }
  77. int start=Main();
  78. int main(){;}