#6
by yk230 » 3年前
返信ありがとうございます。abdとnumsをグローバル変数にして要素数を10倍し、正しい答えが出ました。ありがとうございます!最終的なコードは以下のようになりました。皆さんありがとうございました。
コード:
#include <stdio.h>
int abd[70000]; /*過剰数リスト*/
int nums[281230];
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 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++){
// printf("%d, %d, %d, %d, %d\n", i, j, abd[i], abd[j], abd[i] + abd[j]);
nums[abd[i] + abd[j]] = 0;
}
}
for(i = 1; i < 28123 + 1; i++){
// printf("%d, %d\n", i, nums[i]);
ans += i * nums[i];
}
printf("ans = %d\n", ans);
return 0;
}
返信ありがとうございます。abdとnumsをグローバル変数にして要素数を10倍し、正しい答えが出ました。ありがとうございます!最終的なコードは以下のようになりました。皆さんありがとうございました。
[code]#include <stdio.h>
int abd[70000]; /*過剰数リスト*/
int nums[281230];
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 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++){
// printf("%d, %d, %d, %d, %d\n", i, j, abd[i], abd[j], abd[i] + abd[j]);
nums[abd[i] + abd[j]] = 0;
}
}
for(i = 1; i < 28123 + 1; i++){
// printf("%d, %d\n", i, nums[i]);
ans += i * nums[i];
}
printf("ans = %d\n", ans);
return 0;
}[/code]