006--求解500万以内的亲和数
来源:互联网 发布:python 中文数字转换 编辑:程序博客网 时间:2024/04/29 15:00
题目描述:
求500万以内的所有亲和数
如果两个数a和b,a的所有真因数之和等于b,b的所有真因数之和等于a,则称a,b是一对亲和数。
求500万以内的所有亲和数
如果两个数a和b,a的所有真因数之和等于b,b的所有真因数之和等于a,则称a,b是一对亲和数。
例如220和284,1184和1210,2620和2924。
思路:利用数组记录从1-5,000,000
#include<stdio.h> int sum[5000010]; //为防越界 int main() { int i, j; for (i = 0; i <= 5000000; i++) sum[i] = 1; //1是所有数的真因数所以全部置1 for (i = 2; i + i <= 5000000; i++) //预处理,预处理是logN(调和级数)*N。 //@litaoye:调和级数1/2 + 1/3 + 1/4......的和近似为ln(n), //因此O(n *(1/2 + 1/3 + 1/4......)) = O(n * ln(n)) = O(N*log(N))。 { //5000000以下最大的真因数是不超过它的一半的 j = i + i; //因为真因数,所以不能算本身,所以从它的2倍开始 while (j <= 5000000) { //将所有i的倍数的位置上加i sum[j] += i; j += i; } } for (i = 220; i <= 5000000; i++) //扫描,O(N)。 { // 一次遍历,因为知道最小是220和284因此从220开始 if (sum[i] > i && sum[i] <= 5000000 && sum[sum[i]] == i) { //去重,不越界,满足亲和 printf("%d %d/n",i,sum[i]); } } return 0; }
0 0
- 求解500万以内的亲和数
- 求解500万以内的亲和数
- 006--求解500万以内的亲和数
- 第六章:求解500万以内的亲和数
- 第四章、亲和数问题--求解500万以内的亲和数
- 亲和数问题--求解500万以内的亲和数之—Scheme语言实现
- 寻找500万以内的亲和数
- 500万以内的亲和数
- 程序员编程艺术:第六章、求解500万以内的亲和数
- 程序员编程艺术:第六章、求解500万以内的亲和数
- 程序员编程艺术:第六章、求解500万以内的亲和数
- 程序员编程艺术:第六章、求解500万以内的亲和数
- 【程序员编程艺术】第六章:求解500万以内的亲和数
- 算法学习(五)求解500万以内的亲和数,连续数据映射为数组
- 如何求500万以内的所有亲和数
- 求500万以内的所有亲和数
- 求5000000以内的亲和数
- 求N以内的所有亲和数
- Ubuntu 14.04下单节点Ceph安装(by quqi99)
- linux下如何模拟按键输入和模拟鼠标
- 关于用jquery.masonry.js实现动态加载效果(当页面滚动条拉到底部时时重新加载图片)
- 计算机网络(自顶向下方法)学习笔记 1.5 协议层次和它们的服务模型
- 关于IOS由于Dropbox被封,https请求不好用的解决办法
- 006--求解500万以内的亲和数
- UIButton上使用UIEdgeInsetsMaketitle设置图片与文字居中对齐
- zookeeper安装与运行
- 【云图】如何制作附近实体店的地图?-微信微博支付宝
- 查看SGA大小
- maven pom.xml
- Android深入浅出之Binder机制
- Android中Parcelable接口用法
- AndroidStudio用maven导入项目步骤