Wannafly Camp 2020 Day 1H 最大公约数 - 质因数分解,高精度
把每个质因子扒出来乱搞一下
#include <bits/stdc++.h>
using namespace std;
int g[505][505];
int isp[505];
struct Biguint {
int a[10005], len;
Biguint() {
memset(a, 0, sizeof a);
len = 0;
}
void read() {
string str;
cin >> str;
memset(a, 0, sizeof a);
len = str.length();
for (int i = 0; i < str.size(); i++)
a[i] = str[str.length() - i - 1] - '0';
}
void print() {
for (int i = len - 1; i >= 0; i--) {
cout << a[i];
}
}
bool operator < (const Biguint& obj) {
const int* b = obj.a;
if (this->len == obj.len) {
for (int i = 0; i < len; i++)
if (a[i] != b[i]) return a[i] < b[i];
return false;
}
else return this->len < obj.len;
}
bool operator > (const Biguint& obj) {
const int* b = obj.a;
if (this->len == obj.len) {
for (int i = 0; i < len; i++)
if (a[i] != b[i]) return a[i] > b[i];
return false;
}
else return this->len > obj.len;
}
bool operator != (const Biguint& obj) {
return (*this < obj) | (*this > obj);
}
bool operator == (const Biguint& obj) {
return !((*this < obj) | (*this > obj));
}
bool operator <= (const Biguint& obj) {
return (*this) < obj || (*this) == obj;
}
bool operator >= (const Biguint& obj) {
return (*this) > obj || (*this) == obj;
}
Biguint operator += (const Biguint& obj) {
const int* b = obj.a;
if (obj.len > len) len = obj.len;
for (int i = 0; i < len; i++) {
a[i] += b[i];
if (a[i] >= 10) a[i + 1] += a[i] / 10, a[i] %= 10;
}
if (a[len]) ++len;
while (a[len - 1] >= 10)
a[len] += a[len - 1] / 10, a[len - 1] %= 10, ++len;
return *this;
}
Biguint operator + (const Biguint& obj) {
Biguint ret;
ret += *this;
ret += obj;
return ret;
}
Biguint operator -= (const Biguint& obj) {
const int* b = obj.a;
for (int i = 0; i < len; i++) {
a[i] -= b[i];
if (a[i] < 0) a[i + 1]--, a[i] += 10;
}
while (a[len - 1] == 0 && len > 0) --len;
return *this;
}
Biguint operator -(const Biguint& obj) {
Biguint ret;
ret += *this;
ret -= obj;
return ret;
}
Biguint operator *= (int b) {
for (int i = 0; i < len; i++)
a[i] *= b;
for (int i = 0; i < len; i++)
a[i + 1] += a[i] / 10, a[i] %= 10;
++len;
while (a[len - 1] >= 10)
a[len] += a[len - 1] / 10, a[len - 1] %= 10, ++len;
while (a[len - 1] == 0 && len > 0) --len;
return *this;
}
Biguint operator * (int b) {
Biguint ret;
ret = *this;
ret *= b;
return ret;
}
Biguint operator * (const Biguint& obj) {
const int* b = obj.a;
Biguint ret;
for (int i = 0; i < len; i++)
for (int j = 0; j < obj.len; j++)
ret.a[i + j] += a[i] * b[j];
for (int i = 0; i < len + obj.len; i++)
ret.a[i + 1] += ret.a[i] / 10, ret.a[i] %= 10;
ret.len = len + obj.len;
++ret.len;
while (ret.a[ret.len - 1])
ret.a[ret.len] += ret.a[ret.len - 1] / 10, ret.a[ret.len - 1] %= 10, ++ret.len;
while (ret.a[ret.len - 1] == 0 && ret.len > 0) --ret.len;
return ret;
}
};
ostream& operator << (ostream& os, Biguint num)
{
//cout << "[" << num.len << "]";
for (int i = num.len - 1; i >= 0; --i)
os << num.a[i];
if (num.len == 0) os << "0";
return os;
}
istream& operator >> (istream& is, Biguint& num)
{
string str;
is >> str;
memset(num.a, 0, sizeof num.a);
num.len = str.length();
for (int i = 0; i < str.length(); i++)
num.a[i] = str[str.length() - i - 1] - '0';
return is;
}
Biguint bigu(int t) {
Biguint b;
b.len = 1;
b.a[0] = 1;
b*=t;
return b;
}
int main() {
isp[1]=0;
for(int i=2;i<=500;i++) {
int flag=1;
for(int j=2;j<i;j++)
if(i%j==0) flag=0;
isp[i]=flag;
}
for(int i=1;i<=500;i++) {
int t=i;
for(int j=2;j<=i;j++)
while(isp[j]&&t%j==0)
g[i][j]++,t/=j;
}
int T;
cin>>T;
while(T--) {
int n,k;
cin>>n>>k;
int tk=k;
int myFac[505]={};
for(int i=2;i<=k;i++) {
while(isp[i]&&tk%i==0)
myFac[i]++,tk/=i;
}
int aFac[505]={};
for(int i=k*2;i<=n;i+=k) {
for(int j=2;j<=i;j++)
if(g[i][j]>myFac[j]) aFac[j]=1;
}
for(int i=2;i<=n;i++) {
myFac[i]+=aFac[i];
//cout<<myFac[i]<<" ";
}
//cout<<endl;
Biguint ans = bigu(1);
for(int i=2;i<=n;i++) {
while(myFac[i]) {
Biguint x = bigu(i);
ans=ans*x;
myFac[i]--;
}
}
cout<<ans<<endl;
}
}
Wannafly Camp 2020 Day 1H 最大公约数 - 质因数分解,高精度的更多相关文章
- Wannafly Camp 2020 Day 3I N门问题 - 概率论,扩展中国剩余定理
有一个猜奖者和一个主持人,一共有 \(n\) 扇门,只有一扇门后面有奖,主持人事先知道哪扇门后有奖,而猜奖者不知道.每一轮,猜奖者选择它认为的有奖概率最大(如果有多个最大,随机选一个)的一扇门,主持人 ...
- Wannafly Camp 2020 Day 3F 社团管理 - 决策单调性dp,整体二分
有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方 ...
- 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 ...
- 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 ...
- Wannafly Camp 2020 Day 2D 卡拉巴什的字符串 - 后缀自动机
动态维护任意两个后缀的lcp集合的mex,支持在串末尾追加字符. Solution 考虑在 SAM 上求两个后缀的 LCP 的过程,无非就是找它们在 fail 树上的 LCA,那么 LCP 长度就是这 ...
- Wannafly Camp 2020 Day 1D 生成树 - 矩阵树定理,高斯消元
给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成 ...
- Wannafly Camp 2020 Day 2I 堡堡的宝藏 - 费用流
感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memse ...
- Wannafly Camp 2020 Day 2J 邦邦的2-SAT模板
#include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; cout<<n& ...
- Wannafly Camp 2020 Day 2F 采蘑菇的克拉莉丝 - 树链剖分
如果暴力维护,每次询问时需要对所有孩子做计算 考虑通过树剖来平衡修改与询问的时间,询问时计算重链和父树,轻链的贡献预先维护好,修改时则需要修改可能影响的轻链贡献,因为某个点到根的路径上轻重交替只有 \ ...
随机推荐
- AndroidStudio报错:Emulator: I/O warning : failed to load external entity "file:/C:/Users/Administrator/.AndroidStudio3
场景 在进行Android Studio的.Android Studio目录从C盘修改为其他目录后,新建App启动提示: Emulator: I/O warning : failed to load ...
- spring boot 打包jar后访问classes文件夹的文件提示地址不存在
报错内容:class path resource [client.p12] cannot be resolved to absolute file path because it does not r ...
- Mysql:初识MySQL
转载自:https://www.cnblogs.com/hellokuangshen/archive/2019/01/09/10246029.html Mysql:初识MySQL 只会写代码的是码农: ...
- Python学习零基础<入门必学>
1. 注释注释 是任何存在于 # 号右侧的文字,其主要用作写给程序读者看的笔记. 2. 字面常量一个字面常量(Literal Constants)的例子是诸如 5.1.23 这样的数字,或者是如 这是 ...
- Uderstanding and using Pointers 读书笔记
如何阅读指针? 从右向左读. 比如 const int *pci; 虚拟内存和虚拟内存地址是什么? 一个应用程序,在虚拟内存地址里也许是连续的,但是在物理内存里也许是分隔开来的. 虚拟内存和物理内存的 ...
- MySQL表名大小写敏感性
Linux版MySQL 库名与表名是严格区分大小写的: 表的别名是严格区分大小写的: 列名与列的别名在所有的情况下均是忽略大小写的: 变量名也是严格区分大小写的: 修改步骤如下: 1. 编辑[/etc ...
- SpringBoot项目自定义浏览器选项卡左上角图标(favicon.ico)-sunziren
favicon.ico是浏览器选项卡左上角的图标,可以放在静态资源路径下或者类路径下面.静态资源路径下的favicon.ico优先级高于类路径下的favicon.ico. 可以使用在线转换网站http ...
- 【python基础语法】第1天作业练习题
# 1.下面那些不能作为标识符? """ 1.find 2. _num 3.7val 4.add. 5.def 6.pan 7.-print 8.open_file 9. ...
- NodeJS_0001:关于install的方式
最近在写Node程序的时候,突然对 npm install 的-save和-save-dev 这两个参数的使用比较混乱.其实博主在这之前对这两个参数的理解也是模糊的,各种查资料和实践后对它们之间的异同 ...
- 如何使用GitHub中和别人合作开发一个项目
第一步:找到别人在GitHub的项目,点击Fork跳转到自己的GitHub 第二步:跳转到自己页面后进行克隆下载 第三步:在自己的idea中修改完毕后,进行推送将自己GitHub的项目进行修改 第四步 ...