哪位佬help一下me!!!

null him 2021-01-16 23:25:47 1

题目叙述

素数,又称质数,是指除 1 和其自身之外,没有其他约数的正整数。例如 23513 都是素数,而 491218 则不是。

虽然素数不能分解成除 1 和其自身之外整数的乘积,但却可以分解成更多素数的和。 你需要编程 求出一个正整数最多能分解成多少个互不相同的素数的和。

例如,21 = 2 + 19是21的合法分解方法。21 = 2 + 3 + 5 + 11则是分解为最多素数的方法。

输入格式

n (10≤n≤198)

输出格式

第一行一个整数,表示n 最多能分解成多少个不同的素数的和。

第二行输出次拆分方案,格式见样例,数字按照从小到大的顺序输出

样例

输入

21

输出

4
21=2+3+5+11

{{ vote && vote.total.up }}

共 7 条回复

null him

十分感谢

pikahuan 逗比
#include <bits/stdc++.h>
using namespace std;
int n,d=0,b[30],x,a[46]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199};
stack<int>u;
int main()
{
    scanf("%d",&n),x=n;
    for(;1;)
    {
        for(;n>=a[d];)n-=a[d],u.push(a[d]),d++;
        if(n)n+=u.top(),u.pop();
        else break;
    }d=u.size();
    for(int i=d-1;i>=0;i--)b[i]=u.top(),u.pop();
    printf("%d=%d",x,b[0]);
    for(int i=1;i<d;i++)printf("+%d",b[i]);
    return 0;
}
root 站长

感觉像一个搜索的样子

pikahuan 逗比

需要一个stack

pikahuan 逗比

n这么小,您觉得呢

pikahuan 逗比

这个是贪心,从2开始枚举

JupHamaster 木星拜

?