素数分解 (2016_6)
来源:互联网 发布:淘宝卖家积分等级:皇冠 编辑:程序博客网 时间:2024/06/17 16:01
素数分解 (2016_6)
素数,又称质数,是指除 1和其自身之外,没有其他约数的正整数。例如 2、3、5、13 都是质 数,而 4、9、12、18 则不是。 虽然素数不能分解成除 1和其自身之外整数的乘积,但却可以分解成更多素数的和。你需要编程 求出一个正整数最多能分解成多少个互不相同的素数的和。 例如,21 = 2 + 19 是 21的合法分解方法。21 = 2 + 3 + 5 + 11 则是分解为最多素数的方法。
输入 n (10 ≤ n ≤ 200)。
输出 n 最多能分解成多少个不同的素数的和。
输入 输出:
样例1, 21 4
样例2, 128 9
这是我的方法
#include<iostream>#include<cmath>using namespace std;int num[50];int n;int index=0;int maxtotal=-1;bool issu(int m)//判断素数{ if (m==2) return true; else if (m%2==0) return false; else { int k=sqrt(m)+1; for (int i=2;i<=k;i++) { if (m%i==0) return false; } } return true;}void fun(int k,int sum,int total)//k为当前下标,sum为总和,total为使用的数字的个数{ if (sum==n) { if (total>maxtotal)//更新total { maxtotal=total; } return ; } if (sum>n||k>=index)//如果sum超过n,或者下标大于素数个数结束 { return ; } fun(k+1,sum+num[k],total+1); fun(k+1,sum,total);}int main(){ cin>>n; for (int i=2;i<=n;i++) { if (issu(i))//如果是素数,将其存进num数组 { num[index++]=i; } } fun(0,0,0); cout<<maxtotal; return 0;}
但我老师给出了更牛逼的做法。我老师的做法,利用哥德巴赫猜想。
#include<iostream>#include<cmath>using namespace std;int num[50];int n;int index=0;bool issu(int m)//判断素数{ if (m==2) return true; else if (m%2==0) return false; else { int k=sqrt(m)+1; for (int i=2;i<=k;i++) { if (m%i==0) return false; } } return true;}int main(){ cin>>n; int sum=01,i,j; for (int i=2;i<=200;i++) { if (issu(i))//如果是素数,将其存进num数组 { num[index++]=i; } } //_______________________________ for ( i=0;sum<n;i++)//将素数逐个累加 sum+=num[i]; if (sum==n)//如果正好等于n,即为正解 { cout<<i; return 0; } for ( j=2,sum-=n;j<=sqrt(sum);j++)//当sum>n时,需要sum-=n, { if (sum%j==0) break; } //此时sum不是质数就是合数 if (j>sqrt(sum))//如果是质数将个数减1 i--; else//如果是合数,则减2 i-=2; cout<<i; return 0;}
0 0
- 素数分解 (2016_6)
- 素数分解
- 素数分解
- 素数分解
- 素数筛选 素数分解
- 蓝桥杯 算法设计_6 分解质因数
- 素数和分解
- HDU-1333(素数分解)
- 基础知识-素数分解
- 素数和分解
- 素数分解 dp
- HDU1299 素数分解
- 1215 -- 素数分解
- 【lightoj1336】素数分解
- 分解的素数
- 素数分解定理
- 大素数分解与素数判定
- 素数表 与 质因数分解
- HoloLens开发——利用Unity WWW访问图片并将贴图付给cube Renderer
- centos7.3 安装mysql
- Eclipse中Project的属性Deployment Assembly(部署程序集)消失了,不存在了,去哪儿了
- opencv知识点
- 一道八进制的编程题,在本地运行结果正常,在牛客网提交编译提示输出错误
- 素数分解 (2016_6)
- 山东省第八届 ACM 省赛 company (贪心、水)
- Spring中使用@Pointcut出现IllegalArgumentException
- opencv之仿射与透视变换总结
- qml ListModel与Repeater编写重复控件界面
- SpringMVC+MyBatis+MySql环境搭建
- Centos 设置tomcat开机启动
- android选取linux作为内核的原因
- 在Linux上安装字体