码迷,mamicode.com
首页 > 其他好文 > 详细

Prime(dp+素数筛)

时间:2020-08-19 19:23:20      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:iostream   自然数   tchar   情况   bre   有一个   type   head   utc   

任何大于 1 的自然数 N,都可以写成若干个大于等于2且小于等于 N 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形式。例如9 的质数和表达式就有四种本质不同的形式:9 = 2+5+2 = 2+3+2+2 = 3+3+3 = 2+7 。 
这里所谓两个本质相同的表达式是指可以通过交换其中一个表达式中参加和运算的各个数的位置而直接得到另一个表达式。 
试编程求解自然数 N 可以写成多少种本质不同的质数和表达式。

输入

一个自然数 N , 2≤N≤2000。

输出

输出每一个自然数 N 的本质不同的质数和表达式的数目。

样例输入 Copy

2

样例输出 Copy

1

这个题就是爆了ll,所以要用用__int128
void scan(__int128 &x) { //输入
    x = 0;
    int f = 1;
    char ch;
    if((ch = getchar()) == -) f = -f;
    else x = x*10 + ch-0;
    while((ch = getchar()) >= 0 && ch <= 9)
        x = x*10 + ch-0;
    x *= f;
}

void _print(__int128 x) {
    if(x > 9) _print(x/10);
    putchar(x%10 + 0);
}
void print(__int128 x) { //输出
    if(x < 0) {
        x = -x;
        putchar(-);
    }
    _print(x);
}
#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
#include<string> 
#include <math.h> 
#include<memory.h>
#include<cstring>
using namespace std; 
typedef unsigned long long ll; 
void scan(__int128 &x) { //输入
    x = 0;
    int f = 1;
    char ch;
    if((ch = getchar()) == -) f = -f;
    else x = x*10 + ch-0;
    while((ch = getchar()) >= 0 && ch <= 9)
        x = x*10 + ch-0;
    x *= f;
}

void _print(__int128 x) {
    if(x > 9) _print(x/10);
    putchar(x%10 + 0);
}
void print(__int128 x) { //输出
    if(x < 0) {
        x = -x;
        putchar(-);
    }
    _print(x);
}
const int maxn=3e3+100;
int biaoji[maxn];
int p[maxn];
int cnt=0;
void inint(){
    for(int i=2;i<=maxn;i++){
        if(!biaoji[i]){
            p[++cnt]=i;
        }
        for(int j=1;j<=cnt&&i*p[j]<maxn;j++){
            biaoji[i*p[j]]=1;
            if(i%p[j]==0){
                break;
            }
        } 
    }
}
int n;
__int128 f[maxn];
void c(){
    cin>>n;
    f[0]=1;
}
int main(){
    inint();
    c();
    for(int i=1;i<=cnt;i++){
        for(int j=p[i];j<=n;j++){
            f[j]+=f[j-p[i]];
        }
    }
    print(f[n]);
} 

 

 

Prime(dp+素数筛)

标签:iostream   自然数   tchar   情况   bre   有一个   type   head   utc   

原文地址:https://www.cnblogs.com/lipu123/p/13515024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!