2025年华东师范大学计算机考研复试机试真题
2025年华东师范大学计算机考研复试上机真题
历年华东师范大学计算机考研复试上机真题
历年华东师范大学计算机考研复试机试真题
更多学校题目开源地址:https://gitcode.com/verticallimit1/noobdream
N 诺 DreamJudge 题库:输入 “学校名称” 即可筛选该校历年机试真题,题目均在考纲范围内,按难度自动排序。还可搭配《计算机考研机试攻略》刷题,书中题目可通过题号直接在题库中查找。
整数分解
题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
给一个正整数n,求将其分解为若干个素数之和的方案数。(1<=n<=1000)
比如7,有三种方案:
(1)7
(2)5+2
(3)3+2+2
输入输出格式
输入描述:
如题
输出描述:
如题
输入输出样例
输入样例#:
7
输出样例#:
3
代码一
- #include<stdio.h>
- #include<stdlib.h>
- #include<memory.h>
- #include<math.h>
- int isPrim(int n){
- if(n==1){return 0;}
- for(int i=2;i<=(int)sqrt(n);i++){
- if(n%i==0){return 0;}
- }
- return 1;
- }
- void solve1967(int* prims, long long dp[169][1001]){//完全背包问题
- for(int i=1; i<=168; i++){
- for(int j=1; j<=1000; j++){
- //不用prims[i];
- dp[i][j] = dp[i-1][j];
- //用prims[i]
- if(j == prims[i]){dp[i][j]++;}
- if(j > prims[i]){dp[i][j]+=dp[i][j-prims[i]];}
- }
- }
- }
- int main(){
- int n,prims[169]={0},len=1;
- long long dp[169][1001];//用前i个素数组成数字j的方案数
- for(int i=1;i<=1000;i++){
- if(isPrim(i)==1){prims[len++]=i;}
- }
- solve1967(prims,dp);
- while(scanf("%d",&n) > 0){
- printf("%lld\n",dp[168][n]);
- }
- }
代码二
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 2e3;
- vector<int> prm;
- bool vis[N];
- void init(){
- for(int i=2;i*i <= 1000; ++i){
- if(vis[i]) continue;
- for(int j=i+i;j<=1000;j+=i){
- vis[j] = 1;
- }
- }
- for(int i=2;i<=1000;++i) if(!vis[i]) prm.push_back(i);
- // for(int x:prm) cout << x<<' ';
- }
- long long f[N];
- int main(){
- init();
- int n; cin >> n;
- f[0] = 1;
- for(int x:prm){
- for(int i=x;i<=n;++i){
- f[i] += f[i-x];
- }
- }
- cout << f[n];
- }
代码三
- #include <bits/stdc++.h>
- using namespace std;
- int main() {
- int n;
- cin>>n;
- vector<int> nums;
- for(int i = 2;i<=n;i++){
- int flag = 1;
- for(int j = 2;j<int(sqrt(i))+1;j++){
- if(i%j==0){
- flag = 0;
- break;
- }
- }
- if(flag == 1)
- nums.push_back(i);
- }
- vector<unsigned long long> dp(n+1,0);
- dp[0] = 1;
- for(int i = 0;i<nums.size();i++){
- for(int j = nums[i];j<=n;j++){
- dp[j] += dp[j-nums[i]];
- }
- }
- cout<<dp[n]<<endl;
- }