题意:

记d(n)为n的所有真因数(小于n且整除n的正整数)之和。

如果d(a) = b且d(b) = a,且a ≠ b,那么a和b构成一个亲和数对,a和b被称为亲和数。

例如,220的真因数包括1、2、4、5、10、11、20、22、44、55和100,因此d(220) = 284;而284的真因数包括1、2、4、71和142,因此d(284) = 220。

求所有小于10000的亲和数的和。

整数因子和:

<font color = red , size = 5 >**以下图片仅供学习!图片来源为海贼科技:

http://www.haizeix.com/

**














My Code :

/*************************************************************************
> File Name: euler021.c
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年06月30日 星期五 16时47分13秒
************************************************************************/ #include <stdio.h>
#include <inttypes.h> #define MAX_RANGE 10000 int32_t isPrime[MAX_RANGE + 10] = {0}; // 存放数字i的最小素因子幂次项,例如isPrime[24] = 8
int32_t prime[MAX_RANGE + 10] = {0}; // 素数表
int32_t d[MAX_RANGE + 10] = {0}; // 存放数字i约数的和 void Init() {
for (int32_t i = 2 ; i <= MAX_RANGE ; i++) {
if (!isPrime[i]) {
isPrime[i] = i;
d[i] = i + 1;
prime[++prime[0]] = i;
}
for (int32_t j = 1 ; j <= prime[0] ; j++) {
if (i * prime[j] > MAX_RANGE) break;
if (i % prime[j] == 0) { // 如果prime[j]是i的最小素因子,那么就相当于在原来的基础上增加了一个最小的素因子,所以得改变原来的d[]
isPrime[i * prime[j]] = isPrime[i] * prime[j];
d[i * prime[j]] = d[i] * (isPrime[i] * prime[j] * prime[j] - 1) / (isPrime[i] * prime[j] - 1); // 更改最小素因子等比序列和
break;
} else {
isPrime[i * prime[j]] = prime[j]; // 因为prime[j]比i的最小素因子还小(线性筛原理),所以更新i * prime[j] 的最小素因子为prime[j]
d[i * prime[j]] = d[i] * d[prime[j]]; // i 和 prime[j]互素所以可以用约数和定理:若正整数A、B互素 C = A*B 则有F(C) = F(A) * F(B)(F(x)为x的约数和)
}
}
}
}
int32_t main() {
Init();
for (int32_t i = 1 ; i <= MAX_RANGE ; i++) {
d[i] -= i; // 并不包含自身
}
int32_t sum = 0;
printf("d[220] = %d\n",d[220]);
printf("d[284] = %d\n",d[284]);
for (int32_t i = 1 ; i <= MAX_RANGE ; i++) {
if (d[i] > MAX_RANGE) continue;
if (d[d[i]] == i && d[i] != i) { // 注意题目中要求 d(a) = b,d(b) = a,a!=b
sum += i;
}
}
printf("%d\n",sum);
return 0;
}

Project Euler 21 Distinct primes factors( 整数因子和 )的更多相关文章

  1. Project Euler 47 Distinct primes factors( 筛法记录不同素因子个数 )

    题意: 首次出现连续两个数均有两个不同的质因数是在: 14 = 2 × 715 = 3 × 5 首次出现连续三个数均有三个不同的质因数是在: 644 = 22 × 7 × 23645 = 3 × 5 ...

  2. Project Euler 23 Non-abundant sums( 整数因子和 )

    题意: 完全数是指真因数之和等于自身的那些数.例如,28的真因数之和为1 + 2 + 4 + 7 + 14 = 28,因此28是一个完全数. 一个数n被称为亏数,如果它的真因数之和小于n:反之则被称为 ...

  3. (Problem 47)Distinct primes factors

    The first two consecutive numbers to have two distinct prime factors are: 14 = 2  7 15 = 3  5 The fi ...

  4. Project Euler:Problem 47 Distinct primes factors

    The first two consecutive numbers to have two distinct prime factors are: 14 = 2 × 7 15 = 3 × 5 The ...

  5. Project Euler 29 Distinct powers( 大整数质因数分解做法 + 普通做法 )

    题意: 考虑所有满足2 ≤ a ≤ 5和2 ≤ b ≤ 5的整数组合生成的幂ab: 22=4, 23=8, 24=16, 25=3232=9, 33=27, 34=81, 35=24342=16, 4 ...

  6. Project Euler 27 Quadratic primes( 米勒测试 + 推导性质 )

    题意: 欧拉发现了这个著名的二次多项式: f(n) = n2 + n + 41 对于连续的整数n从0到39,这个二次多项式生成了40个素数.然而,当n = 40时402 + 40 + 41 = 40( ...

  7. Project Euler 37 Truncatable primes

    题意:3797有着奇特的性质.不仅它本身是一个素数,而且如果从左往右逐一截去数字,剩下的仍然都是素数:3797.797.97和7:同样地,如果从右往左逐一截去数字,剩下的也依然都是素数:3797.37 ...

  8. Project Euler 35 Circular primes

    题意:197被称为圆周素数,因为将它逐位旋转所得到的数:197/971和719都是素数.小于100的圆周素数有十三个:2.3.5.7.11.13.17.31.37.71.73.79和97.小于一百万的 ...

  9. Project Euler 58: Spiral primes

    从一开始按以下方式逆时针旋转,可以形成一个边长为七的正方形螺旋: 一个有趣的现象是右下对角线上都有一个奇完全平方数,但是更有趣的是两条对角线上的十三个数中有八个数是素数(已经标红),也就是说素数占比为 ...

随机推荐

  1. [bzoj5118]Fib数列2_费马小定理_矩阵乘法

    Fib数列2 bzoj-5118 题目大意:求Fib($2^n$). 注释:$1\le n\le 10^{15}$. 想法:开始一看觉得一定是道神题,多好的题面啊?结果...妈的,模数是质数,费马小定 ...

  2. Android获取设备屏幕宽高像素值的两个方法

    private void get1() { Resources resources = this.getResources(); DisplayMetrics dm = resources.getDi ...

  3. 进入Material Design时代

    ------------------------------------------------------------------------------ GitHub:lightSky 微博:   ...

  4. springmvc 监听器getWriter() has already been called for this response问题

    springmvc 监听器getWriter() has already been called for this response问题 在监听器中,如果return true,就不要使用 respo ...

  5. DeepLearning to digit recognizer in kaggle

    DeepLearning to digit recongnizer in kaggle 近期在看deeplearning,于是就找了kaggle上字符识别进行练习.这里我主要用两种工具箱进行求解.并比 ...

  6. bzoj5194: [Usaco2018 Feb]Snow Boots

    还真是.. 就是 一个被不点名批评的垃圾骗分暴力选手被普及难度的省选信心(??)模拟赛艹爆的题解 的t3嘛... #include<cstdio> #include<iostream ...

  7. WebRequestSugar

    用法 WebRequestSugar ws = new WebRequestSugar(); //可选参数 //ws.SetAccept //ws.SetContentType //ws.SetCoo ...

  8. Node.js:Web 模块

    ylbtech-Node.js:Web 模块 1.返回顶部 1. Node.js Web 模块 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服 ...

  9. anaconda 使用 及 tensorflow-gpu 安装

    Anaconda简易使用 创建新环境 conda create -n rcnn python=3.6 删除环境 conda remove -n rcnn --all 进入环境 conda activa ...

  10. Jsoup的简单的使用示例

    利用Jsoup中的相关方法实现网页中的数据爬去,本例子爬去的网页为比较流行的programmableweb中的mashup描述内容,然后为数据库中存在的mashup添加相应的描述. package c ...