CF1864C

记录一道昨天卡住的题问题链接

给你一个整数n,你可以进行最多1000次操作,使得n减去它的一个因数,要求每种减数至多出现两次

我们考虑先把n进行质因数分解,得到质因数序列P {p1,p2,...,pm}

我们从中取出一个最大的质因数x,然后让n减去nx,也就是pix,接下来再把x1分解质因数并放回序列

试想,只有质因数除去最大值外,其他数字累乘相等时才会出现减数重复现象,而x1不为1x1一定可以分解,可以发现除去最大值外所有数字相乘的状态是不可逆的,除非P仅包含一个质数

P只有在初状态和末状态可能是单个质数

得证

#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<ll>ans;
priority_queue<ll>q;
void solve(){
    ll n,now;
    ans.clear();
    scanf("%lld",&n);
    now=n;
    for(int i=2;i*i<=n;i++){
        while(n%i==0){
            n/=i;
            q.push(i);
        }
    }
    if(n>1)q.push(n);
    ans.push_back(now);
    while(!q.empty()){
        int t=q.top();
        q.pop();
        now=now/t*(t-1);
        t--;
        ans.push_back(now);
        for(int i=2;i*i<=t;i++){
            while(t%i==0){
                q.push(i);
                t/=i;
            }
        }
        if(t>1)q.push(t);
    }
    printf("%d\n",ans.size());
    for(int j=0;j<ans.size();j++)
        printf("%lld ",ans[j]);
    puts("");
}
int main(){
    int t=1;
    scanf("%d",&t);
    while(t--)solve();
    return 0;
}

作者:Linxrain

出处:https://www.cnblogs.com/Linxrain/p/17660235.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Linxrain  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示