这题跟上两题也差不多。
把150以内的素数找出来,把素数的值看做硬币的面值,每个硬币的个数即ceil(150/prime[i]),因为再多也没用,最多组成n=150就行了,所以又回到了找硬币问题。用生成函数解之。
代码:
#include#include #include #include #include using namespace std;#define N 207int prime[N],flag[N],num[N];int c[7002],tc[7002];int ci;void doit(){ int i,j,n; ci = 0; for(i=2;i<=150;i++) flag[i]=1; for(i=2;i<=150;i++) { if(flag[i]) prime[ci++]=i; for(j=0;j <=150;j++) { flag[i*prime[j]]=0; if(i%prime[j]==0) break; } }}int main(){ doit(); int i,j,k,t,n; int maxi = 0; for(i=0;i