题解:P7051 [NWRRC 2015] Distribution in Metagonia
Shuhang_JOKER1 · · 题解
此篇题解比较简单,面向新手群体,大佬勿喷
题目大意
给定一个整数
题目分析
观察题目:
1.题目中“所有质因数应该是
-
其实就是要将分解的每个数
sum=2^x\times 3^y ,让我们求其中一种分解方案。 -
观察题目,发现分解的数两两互质。
那么所谓的其实就是两两互质其实就是让
题目解答
想要让
为什么是这样呢?我们考虑操作后剩下来的数
既然
代码(求
while(m%2==0){//m 是偶数就继续
m/=2;//缩小 m
sum1*=2;//x 加 1
}
接下来考虑
那我们不妨计算一下,假设
这样既满足了
代码(求
while(sum2 * 3 <= n){//sum 能乘就继续
sum2 *= 3;//y 加 1
然后在外面套个 while 循环,只要
最后,注意本题要开 long long!
接下来看代码:
#include<bits/stdc++.h>
#define int long long//注意要开 long long
using namespace std;
int t,n;
void outs(vector<int> v){
cout<<v.size()<<'\n';
for(int i=0;i<v.size();i++)
cout<<v[i]<<' ';
cout<<'\n';
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--) {
cin>>n;
vector<int>v;
while(n>0) {//如果 n > 0 就继续
int sum1=1,sum2=1,m=n;//sum 和 m
while(m % 2 == 0){//m 是偶数就继续
m /= 2;//缩小 m
sum1 *= 2;//x 加 1
}
while(sum2 * 3 <= m)//sum 能乘就继续
sum2 *= 3;//y 加 1
v.push_back((sum1*sum2));//加入答案
n -= (sum1*sum2);//更新 n
}
outs(v);//输出
}
return 0;
}