[1.1] https://projecteuler.net/problem=23をC言語を使って解きたいです。
[1.2] 2つの過剰数の和で書き表せない正の整数の総和を求めるのに、
・要素数28123+1,1で初期化した配列を用意する
・[過剰数の和]番目の要素を1から0にする
・番目(?)と要素を掛け算して総和を出す(過剰数の和で書き表せるものの要素は0なので掛け算して0にできるから)
という方法を取ろうと思っています。
#include <stdio.h>
int isAbundantNumber(int x){
int sum = 0;
for(int i = 1; i < x; i++){
if(x % i == 0){
// printf("%d\n", i);
sum += i;
}
}
// printf("%d\n", sum);
if(sum > x){
// printf("YES\n");
return 1;
}
return 0;
}
int main(){
int abd[7000]; /*過剰数リスト*/
int nums[28123 + 1];
int cnt = 1;
int ans = 0;
int i, j, a, b;
// 配列初期化
for(i = 0; i < 7000; i++){
abd[i] = 0;
}
for(i = 0; i < 28123 + 1; i++){
nums[i] = 1;
}
// 過剰数リストをつくる
for(i = 1; i <= 28123; i++){
if(isAbundantNumber(i)){
// printf("abd[%d] = %d\n", cnt, i);
abd[cnt] = i;
cnt++;
}
}
// 2つの過剰数の和で書き表せない正の整数の総和を求めよ.
for(i = 1; i < cnt; i++){
printf("%d\n", i);
for(j = i; j < cnt; j++){
nums[abd[i] + abd[j]] = 0;
}
}
for(i = 0; i < 28123 + 1; i++){
printf("%d\n", i);
ans += i * abd[i];
}
printf("ans = %d\n", ans);
return 0;
}
// 2つの過剰数の和で書き表せない正の整数の総和を求めよ.
for(i = 1; i < cnt; i++){
printf("%d\n", i);
for(j = i; j < cnt; j++){
nums[abd[i] + abd[j]] = 0;
}
}
[2] 環境
[2.1] OS : Windows 10
[2.2] コンパイラ名 : gcc
[3] その他
・(Cは大学で一通りやったのになんにもおぼえてなくてつらい)