把每个质因子扒出来乱搞一下

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int g[505][505];
  4. int isp[505];
  5. struct Biguint {
  6. int a[10005], len;
  7. Biguint() {
  8. memset(a, 0, sizeof a);
  9. len = 0;
  10. }
  11. void read() {
  12. string str;
  13. cin >> str;
  14. memset(a, 0, sizeof a);
  15. len = str.length();
  16. for (int i = 0; i < str.size(); i++)
  17. a[i] = str[str.length() - i - 1] - '0';
  18. }
  19. void print() {
  20. for (int i = len - 1; i >= 0; i--) {
  21. cout << a[i];
  22. }
  23. }
  24. bool operator < (const Biguint& obj) {
  25. const int* b = obj.a;
  26. if (this->len == obj.len) {
  27. for (int i = 0; i < len; i++)
  28. if (a[i] != b[i]) return a[i] < b[i];
  29. return false;
  30. }
  31. else return this->len < obj.len;
  32. }
  33. bool operator > (const Biguint& obj) {
  34. const int* b = obj.a;
  35. if (this->len == obj.len) {
  36. for (int i = 0; i < len; i++)
  37. if (a[i] != b[i]) return a[i] > b[i];
  38. return false;
  39. }
  40. else return this->len > obj.len;
  41. }
  42. bool operator != (const Biguint& obj) {
  43. return (*this < obj) | (*this > obj);
  44. }
  45. bool operator == (const Biguint& obj) {
  46. return !((*this < obj) | (*this > obj));
  47. }
  48. bool operator <= (const Biguint& obj) {
  49. return (*this) < obj || (*this) == obj;
  50. }
  51. bool operator >= (const Biguint& obj) {
  52. return (*this) > obj || (*this) == obj;
  53. }
  54. Biguint operator += (const Biguint& obj) {
  55. const int* b = obj.a;
  56. if (obj.len > len) len = obj.len;
  57. for (int i = 0; i < len; i++) {
  58. a[i] += b[i];
  59. if (a[i] >= 10) a[i + 1] += a[i] / 10, a[i] %= 10;
  60. }
  61. if (a[len]) ++len;
  62. while (a[len - 1] >= 10)
  63. a[len] += a[len - 1] / 10, a[len - 1] %= 10, ++len;
  64. return *this;
  65. }
  66. Biguint operator + (const Biguint& obj) {
  67. Biguint ret;
  68. ret += *this;
  69. ret += obj;
  70. return ret;
  71. }
  72. Biguint operator -= (const Biguint& obj) {
  73. const int* b = obj.a;
  74. for (int i = 0; i < len; i++) {
  75. a[i] -= b[i];
  76. if (a[i] < 0) a[i + 1]--, a[i] += 10;
  77. }
  78. while (a[len - 1] == 0 && len > 0) --len;
  79. return *this;
  80. }
  81. Biguint operator -(const Biguint& obj) {
  82. Biguint ret;
  83. ret += *this;
  84. ret -= obj;
  85. return ret;
  86. }
  87. Biguint operator *= (int b) {
  88. for (int i = 0; i < len; i++)
  89. a[i] *= b;
  90. for (int i = 0; i < len; i++)
  91. a[i + 1] += a[i] / 10, a[i] %= 10;
  92. ++len;
  93. while (a[len - 1] >= 10)
  94. a[len] += a[len - 1] / 10, a[len - 1] %= 10, ++len;
  95. while (a[len - 1] == 0 && len > 0) --len;
  96. return *this;
  97. }
  98. Biguint operator * (int b) {
  99. Biguint ret;
  100. ret = *this;
  101. ret *= b;
  102. return ret;
  103. }
  104. Biguint operator * (const Biguint& obj) {
  105. const int* b = obj.a;
  106. Biguint ret;
  107. for (int i = 0; i < len; i++)
  108. for (int j = 0; j < obj.len; j++)
  109. ret.a[i + j] += a[i] * b[j];
  110. for (int i = 0; i < len + obj.len; i++)
  111. ret.a[i + 1] += ret.a[i] / 10, ret.a[i] %= 10;
  112. ret.len = len + obj.len;
  113. ++ret.len;
  114. while (ret.a[ret.len - 1])
  115. ret.a[ret.len] += ret.a[ret.len - 1] / 10, ret.a[ret.len - 1] %= 10, ++ret.len;
  116. while (ret.a[ret.len - 1] == 0 && ret.len > 0) --ret.len;
  117. return ret;
  118. }
  119. };
  120. ostream& operator << (ostream& os, Biguint num)
  121. {
  122. //cout << "[" << num.len << "]";
  123. for (int i = num.len - 1; i >= 0; --i)
  124. os << num.a[i];
  125. if (num.len == 0) os << "0";
  126. return os;
  127. }
  128. istream& operator >> (istream& is, Biguint& num)
  129. {
  130. string str;
  131. is >> str;
  132. memset(num.a, 0, sizeof num.a);
  133. num.len = str.length();
  134. for (int i = 0; i < str.length(); i++)
  135. num.a[i] = str[str.length() - i - 1] - '0';
  136. return is;
  137. }
  138. Biguint bigu(int t) {
  139. Biguint b;
  140. b.len = 1;
  141. b.a[0] = 1;
  142. b*=t;
  143. return b;
  144. }
  145. int main() {
  146. isp[1]=0;
  147. for(int i=2;i<=500;i++) {
  148. int flag=1;
  149. for(int j=2;j<i;j++)
  150. if(i%j==0) flag=0;
  151. isp[i]=flag;
  152. }
  153. for(int i=1;i<=500;i++) {
  154. int t=i;
  155. for(int j=2;j<=i;j++)
  156. while(isp[j]&&t%j==0)
  157. g[i][j]++,t/=j;
  158. }
  159. int T;
  160. cin>>T;
  161. while(T--) {
  162. int n,k;
  163. cin>>n>>k;
  164. int tk=k;
  165. int myFac[505]={};
  166. for(int i=2;i<=k;i++) {
  167. while(isp[i]&&tk%i==0)
  168. myFac[i]++,tk/=i;
  169. }
  170. int aFac[505]={};
  171. for(int i=k*2;i<=n;i+=k) {
  172. for(int j=2;j<=i;j++)
  173. if(g[i][j]>myFac[j]) aFac[j]=1;
  174. }
  175. for(int i=2;i<=n;i++) {
  176. myFac[i]+=aFac[i];
  177. //cout<<myFac[i]<<" ";
  178. }
  179. //cout<<endl;
  180. Biguint ans = bigu(1);
  181. for(int i=2;i<=n;i++) {
  182. while(myFac[i]) {
  183. Biguint x = bigu(i);
  184. ans=ans*x;
  185. myFac[i]--;
  186. }
  187. }
  188. cout<<ans<<endl;
  189. }
  190. }

Wannafly Camp 2020 Day 1H 最大公约数 - 质因数分解,高精度的更多相关文章

  1. Wannafly Camp 2020 Day 3I N门问题 - 概率论,扩展中国剩余定理

    有一个猜奖者和一个主持人,一共有 \(n\) 扇门,只有一扇门后面有奖,主持人事先知道哪扇门后有奖,而猜奖者不知道.每一轮,猜奖者选择它认为的有奖概率最大(如果有多个最大,随机选一个)的一扇门,主持人 ...

  2. Wannafly Camp 2020 Day 3F 社团管理 - 决策单调性dp,整体二分

    有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方 ...

  3. Wannafly Camp 2020 Day 3D 求和 - 莫比乌斯反演,整除分块,STL,杜教筛

    杜教筛求 \(\phi(n)\), \[ S(n)=n(n+1)/2-\sum_{d=2}^n S(\frac{n}{d}) \] 答案为 \[ \sum_{d=1}^n \phi(d) h(\fra ...

  4. Wannafly Camp 2020 Day 2B 萨博的方程式 - 数位dp

    给定 \(n\) 个数 \(m_i\),求 \((x_1,x_2,...,x_n)\) 的个数,使得 \(x_1 \ xor\ x_2\ xor\ ...\ xor\ x_n = k\),且 \(0 ...

  5. Wannafly Camp 2020 Day 2D 卡拉巴什的字符串 - 后缀自动机

    动态维护任意两个后缀的lcp集合的mex,支持在串末尾追加字符. Solution 考虑在 SAM 上求两个后缀的 LCP 的过程,无非就是找它们在 fail 树上的 LCA,那么 LCP 长度就是这 ...

  6. Wannafly Camp 2020 Day 1D 生成树 - 矩阵树定理,高斯消元

    给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成 ...

  7. Wannafly Camp 2020 Day 2I 堡堡的宝藏 - 费用流

    感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memse ...

  8. Wannafly Camp 2020 Day 2J 邦邦的2-SAT模板

    #include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; cout<<n& ...

  9. Wannafly Camp 2020 Day 2F 采蘑菇的克拉莉丝 - 树链剖分

    如果暴力维护,每次询问时需要对所有孩子做计算 考虑通过树剖来平衡修改与询问的时间,询问时计算重链和父树,轻链的贡献预先维护好,修改时则需要修改可能影响的轻链贡献,因为某个点到根的路径上轻重交替只有 \ ...

随机推荐

  1. 11种常用css样式之background学习

    background如何简写?如何在背景图像不变的情况下,依旧实现页面文字滚动,为之奈何?别担心,快用background-attachment: fixed;/*固定定位*/常用的backgroun ...

  2. Android中调用另一个Activity并返回结果-以模拟选择头像功能为例

    场景 Android中点击按钮启动另一个Activity以及Activity之间传值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...

  3. mysql在建表语句中添加索引

    普通索引创建 创建普通索引,即不添加 UNIQUE.FULLTEXT 等任何参数. [例]创建表名为 score 的数据表,并在该表的 id 字段上建立索引,SQL 语句如下: CREATE tabl ...

  4. maven 听视频笔记

    使用  pom.xml 配置 收藏 所听视频来源: https://www.bilibili.com/video/av54119831?p=8 视频: maven  idea 配置服务器 tomcat ...

  5. C#实现的Table的Merge,以及实现Table的Copy和Clone

    C#实现的对两个Table进行Merge,两表必须存在至少一个公共栏位作为连接项,否则连接就失去了意义.如下是对两个table进行Merge的详细代码: private void button1_Cl ...

  6. zabbix | 离线安装agent

    zabbix | 离线安装agent 环境 centos6.7 zabbix-server 3.4 步骤 1. 下载rpm包 首先下载支持的插件 yum install yum-plugin-down ...

  7. 《Adaptive Density Map Generation for Crowd Counting》密集人群检测论文笔记

    背景 密度图\(D_g\)的生成对于最终网络预测结果\(D_e\)至关重要,但是密度图\(D_g\)生成的过程中,高斯核的大小常常是手动设定的,并且对于不同的数据集,核大小和形状通常不一样.这些手动选 ...

  8. jQuery---事件的执行顺序

    事件的执行顺序 // 1 这个是p自己注册的事件(简单事件) $("p").on("click", function () { alert("呵呵哒& ...

  9. exp导出含有双引号的表

    由于ORACLE默认的表名都是不区分大小写,在创建表时,在数据字典中存储的表名为大写.在有些情况下,如果创建的表在表名上加上双引号("),则创建的表其表名在数据字典中不作转换.比如 SQL& ...

  10. Tutorial: Publishing additional services for printing

    Complexity:IntermediateData Requirement:Use your own data There may be occasions when you need to pu ...