C言語関係掲示板

過去ログ

No.1060 約数の個数と総数、及び完全数

[戻る] [ホームページ]
No.13782

プログラム作成
投稿者---☆花音☆(2004/04/27 01:15:41)


1.整数を入力してもらい、その整数の約数の個数を表示するプログラムを作成せよ。(例:12のとき6、18のとき6)

2.整数を入力してもらい、その整数の約数の総和を表示するプログラムを作成せよ。(例:12のとき28、18のとき39)

3.「6」のように自分自身を除く約数の総和が、もとの数と等しくなってしまうものを完全数といいます。
       6の約数={1,2,3,6}
       6以外の約数の和=1+2+3=6
1000以下の完全数を求めるプログラムを作成しなさい。
(答えは6,28,496の3つです)

※printf,scanfを使うのは基本
 unsigned,if else,while,do,forしか習ってないのでこれしか使わない。
 主にforで作りたい。


No.13783

Re:プログラム作成
投稿者---とおりすがり(2004/04/27 01:37:12)


で、ご自分の努力の程は?
丸投げですか?


No.13784

Re:プログラム作成
投稿者---NykR(2004/04/27 10:57:41)


じゃあ、とりあえず3番だけ。
要求されているのと違うやり方なので、このままでは提出できませんが。
# get_sum_divisorもそのままでは2番の答えに使えません。

#include <stdio.h>

typedef unsigned long long ullong;

ullong get_sum_divisor(ullong value)
{
    ullong      e = value & -value;
    ullong      o = value / e;
    ullong      i, j, sum;

    for (i = 1, sum = 0; i * i < o; i += 2) {
        if (o % i) {
            continue;
        }
        for (j = 1; j <= e; j *= 2) {
            sum += j * (i + o / i);
        }
    }
    return sum - value;
}

int main(void)
{
    ullong      value;

    for (value = 1;
         value & 0x000000007fffffff ; value = value << 1 | value << 2
        ) {
        if (value == get_sum_divisor(value)) {
            printf("%llu\n", value);
        }
    }
    return 0;
}



No.13794

Re:プログラム作成
投稿者---Alex(2004/04/27 20:43:49)


頭の体操になったので、1番のソースコードを書いておきます。
コメント文はあえて入れていません。それぞれの処理がどのような意味かは、
ご自分で調べてください。

なお、2番の答えは0または、無限大だと思いますし、
3番は前提が間違っているような気がするのは、私の気のせいでしょうか?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int sei,yaku = 1,i;
  
  printf("整数を入力してください\n");
  
  scanf("%d",&sei);
  
  if(sei == 0)
  {
    printf("解は無数に存在します\n");
    exit(1);
  }else if(sei < 0)
    sei *= -1;
  
  
  for(i = 2; i <= sei / 2; i++)
  {
    if(sei % i == 0)
      yaku++;
  }
  
  yaku++;
  yaku *= 2;
  
  printf("%d の約数の数は %d です\n",sei,yaku);
  
  return 0;
}


多分、出題者は整数と自然数を間違えているのではないかと。


No.13799

Re:プログラム作成
投稿者---とおりすがり(2004/04/28 02:35:12)


1or-1を入力したら、どうなりますか?


No.13800

Re:プログラム作成
投稿者---isshi(2004/04/28 10:44:25)


約数は自然数に対して定義されているのだから、
自然数以外の整数が入力されたらエラーでも出しておけばいいのでは。