ssl1197-质数和分解【dp练习】
生活随笔
收集整理的這篇文章主要介紹了
ssl1197-质数和分解【dp练习】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
任何大于 1 的自然數 n,都可以寫成若干個大于等于 2 ,且小于等于 n 的質數之和表達式(包括只有一個數構成的和表達式的情況),并且可能有不止一種質數和的形式。例如9 的質數和表達式就有四種本質不同的形式:
9 = 2+5+2 = 2+3+2+2 = 3+3+3 = 2+7 。
這里所謂兩個本質相同的表達式是指可以通過交換其中一個表達式中參加和運算的各個數的位置而直接得到另一個表達式。
試編程求解自然數 n 可以寫成多少種本質不同的質數和表達式。
Input
Output
Sample Input
任何大于 1 的自然數 n,都可以寫成若干個大于等于 2 ,且小于等于 n 的質數之和表達式(包括只有一個數構成的和表達式的情況),并且可能有不止一種質數和的形式。例如9 的質數和表達式就有四種本質不同的形式:
9 = 2+5+2 = 2+3+2+2 = 3+3+3 = 2+7 。
這里所謂兩個本質相同的表達式是指可以通過交換其中一個表達式中參加和運算的各個數的位置而直接得到另一個表達式。
試編程求解自然數 n 可以寫成多少種本質不同的質數和表達式。
Input
每一行存放一個自然數 n , 2≤n≤200
Output
輸出每一個自然數 n 的本質不同的質數和表達式的數目
Sample Input
1
1
解題思路
這道題(TM)一看就是方案數水的一匹。
代碼:
#include<cstdio>
int f[201],n,s[47],k;
int main()
{
? scanf("%d",&n);
? bool flag;
? for (int i=2;i<=n;i++)
? {
? ? flag=true;
? ? for (int j=2;j<=i/2;j++) if (i%j==0) {flag=false; break;}
? ? if (flag)?
? ? {
? ? ? k++;
? ? ? s[k]=i;
? ? }
? }//篩1-n里的素數
? f[0]=1;//初始化
? for (int i=1;i<=k;i++)
? ? if (s[i]<=n)//判斷這個素數是否在1-n的范圍內
? ? //其實沒必要╮(╯_╰)╭
? for (int j=0;j<=n-s[i];j++)
? ? f[j+s[i]]+=f[j];//累加方案數
? printf("%d",f[n]);
}
總結
以上是生活随笔為你收集整理的ssl1197-质数和分解【dp练习】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 索尼 SIE:正在积极寻找合作伙伴,收购
- 下一篇: ssl1072-砝码称重【dp练习】