Project Euler 23 Non

编程入门 行业动态 更新时间:2024-10-28 12:28:53

<a href=https://www.elefans.com/category/jswz/34/1761245.html style=Project Euler 23 Non"/>

Project Euler 23 Non


题意:
完全数是指真因数之和等于自身的那些数。例如,28的真因数之和为1 + 2 + 4 + 7 + 14 = 28,因此28是一个完全数。

一个数n被称为亏数,如果它的真因数之和小于n;反之则被称为盈数。

由于12是最小的盈数,它的真因数之和为1 + 2 + 3 + 4 + 6 = 16,所以最小的能够表示成两个盈数之和的数是24。通过数学分析可以得出,所有大于28123的数都可以被写成两个盈数的和;尽管我们知道最大的不能被写成两个盈数的和的数要小于这个值,但这是通过分析所能得到的最好上界。

找出所有不能被写成两个盈数之和的正整数,并求它们的和。

思路:此题与欧拉21题相似


/*************************************************************************> File Name: euler023.c> Author:    WArobot > Blog:      / > Created Time: 2017年06月30日 星期五 19时30分05秒************************************************************************/#include <stdio.h>
#include <inttypes.h>#define MAX_N 28123int32_t isPrime[MAX_N + 10] = {0};      // 记录最小素数幂次方isPrime[24] = 8 (2^3)
int32_t prime[MAX_N + 10] = {0};        // 记录素数
int32_t d[MAX_N + 10] = {0};            // 记录整数分解约数和
int32_t abundantSum[MAX_N + 10] = {0};
int32_t vis[MAX_N + 10] = {0};void Init() {for (int32_t i = 2 ; i <= MAX_N ; i++) {if (!isPrime[i]) {isPrime[i] = i;prime[++prime[0]] = i;d[i] = i + 1;}for (int32_t j = 1 ; j <= prime[0] ; j++) {if (i * prime[j] > MAX_N)   break;if (i % prime[j] != 0) {    // 在prime[j]还小于i的最小素因子时isPrime[i * prime[j]] = prime[j];d[i * prime[j]] = d[i] * d[prime[j]];} else {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;}}}for (int32_t i = 1 ; i <= MAX_N ; i++) {d[i] -= i;if (d[i] <= i)  continue;abundantSum[++abundantSum[0]] = i;}for (int32_t i = 1 ; i < abundantSum[0] ; i++) {for (int32_t j = i + 1 ; j <= abundantSum[0] ; j++) {if (abundantSum[i] + abundantSum[j] > MAX_N)    continue;vis[abundantSum[i] + abundantSum[j]] = 1;}}
}
int32_t main() {Init();int32_t sum = 0;for (int32_t i = 1 ; i <= MAX_N ; i++) {if (vis[i]) continue;sum += i;}printf("%d\n",sum);return 0;
}

转载于:.html

更多推荐

Project Euler 23 Non

本文发布于:2024-03-09 18:08:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1725683.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Project   Euler

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!