24小时热门版块排行榜    

查看: 2689  |  回复: 14
本帖产生 3 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

huycwork

金虫 (著名写手)

[交流] 欧拉工程,第二十一题,计算10000以下亲和数的和。 已有5人参与

咳咳,放假与睡觉之前再发一题,E文不好,诸位见谅哈~

定义d(n)是n的所有约数的和。

如果d(a) = b,d(b) = a且满足a != b,则说a与b是一组亲和数。

例如,220的所有约数是1, 2, 4, 5, 10, 11, 20, 22, 44, 55与110,则d(220) = 284;而284的所有约数是1, 2, 4, 71与142,累加得:d(284) = 220。

试计算10000以下所有亲和数之和。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

漩涡的中心有一块空地,空空的。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dubo

金虫 (著名写手)

优秀版主

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
ben_ladeng(金币+1): 奖励下下 2011-06-04 17:52:28
余泽成(金币+2, 程序强帖+1): 鼓励交流! 2011-06-04 19:32:24
引用回帖:
Originally posted by wangww2011 at 2011-06-03 13:22:19:
结果
CODE:
31626
elapsed time=0.020000 seconds.

c代码
[code]
#include <stdio.h>
#include <math.h>
#include <time.h>

#define TIMERSTART clock_t start_time,stop ...

// play_time_calu.cpp : 定义控制台应用程序的入口点。
//

//#include "stdafx.h"

#include
#include
#include

#define TIMERSTART clock_t start_time,stop_time;double elapsed_time;start_time = clock();
#define TIMERSTOP stop_time = clock();elapsed_time=(double)(stop_time-start_time)/CLOCKS_PER_SEC;printf("elapsed time=%f seconds.\n",elapsed_time);


int sumdivisors(int n){
  int i,sum=1,sqrtn=sqrt(float(n));//sqrtn=sqrt(n) 不正确
  
  for(i=2;i     if(n%i==0)sum+=i+n/i;
  }
  if(sqrtn*sqrtn==n)sum-=sqrtn;
  return sum;
}

int euler21(int n){
  int i,sum=0,tmp;
  for(i=3;i     tmp=sumdivisors(i);
    if(tmp!=i&&tmp       sum+=i;
    }
  }
  
  return sum;
}


int main(void){
        //int i; 没必要
TIMERSTART;

printf("%d\n",euler21(10000));
  
TIMERSTOP;

  return 0;
}
8楼2011-06-04 14:55:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 15 个回答

huycwork

金虫 (著名写手)

★ ★ ★
dubo(金币+1): 多谢交流 2011-06-04 14:42:08
余泽成(金币+2, 程序强帖+1): 鼓励交流! 2011-06-04 19:31:23
C++代码:
CODE:
#include
enum {BUFSZ = 10000};

size_t eular21(){
        size_t buf[BUFSZ];
        memset(buf, 0, sizeof buf);
        for(size_t i = 1; i < BUFSZ; ++i){
                for(size_t j = i+i; j < BUFSZ; j+=i){
                        buf[j] += i;
                }
        }
        size_t d, s = 0;
        for(size_t i = 2; i < BUFSZ; ++i){
                d = buf[i];
                if(i == buf[d]){
                        if(i != d)
                                s += i;
                }
        }
        return s;
}

int main(){
        std::cout< }

漩涡的中心有一块空地,空空的。
2楼2011-06-02 22:34:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 多谢交流 2011-06-04 14:43:26
余泽成(金币+2): 鼓励交流! 2011-06-04 19:31:33
结果
CODE:
31626
elapsed time=0.020000 seconds.

c代码
CODE:
#include
#include
#include

#define TIMERSTART clock_t start_time,stop_time;double elapsed_time;start_time = clock();
#define TIMERSTOP stop_time = clock();elapsed_time=(double)(stop_time-start_time)/CLOCKS_PER_SEC;printf("elapsed time=%f seconds.\n",elapsed_time);


int sumdivisors(int n){
  int i,sum=1,sqrtn=sqrt(n);
  for(i=2;i     if(n%i==0)sum+=i+n/i;
  }
  if(sqrtn*sqrtn==n)sum-=sqrtn;
  return sum;
}

int euler21(int n){
  int i,sum=0,tmp;
  for(i=3;i     tmp=sumdivisors(i);
    if(tmp!=i&&tmp       sum+=i;
    }
  }
  
  return sum;
}


int main(void){
int i;

TIMERSTART;

printf("%d\n",euler21(10000));
  
TIMERSTOP;

  return 0;
}

3楼2011-06-03 13:22:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 多谢交流 2011-06-04 14:43:53
余泽成(金币+2, 程序强帖+1): 鼓励交流! 2011-06-04 19:31:45
看笨拙的matlab吧
CODE:
function result = euler21()
tic;
result = [];
for i=1:10000
    if d(i)~=i && d(d(i))==i
        result = [result,i];
    end
end
result = sum(unique(result));
toc;
end

%% Let d(n) denote the sum of proper divisors of n (numbers less than n which divide evenly into n).
% For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284.
% sub function to compute d(n), called by 21 and 23
function s = d(n)
s = 0;
for i=1:n-1
    if mod(n,i)==0
        s = s+i;
    end
end
end

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
4楼2011-06-03 16:36:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[硕博家园] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 0XLacIJUOj8D 2026-08-24 7/350 2026-08-25 03:24 by BZKMTicpDhFj
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 0XLacIJUOj8D 2026-08-24 3/150 2026-08-25 01:47 by BZKMTicpDhFj
[基金申请] 明天应该可查了!? +5 chengyan1220 2026-08-23 5/250 2026-08-24 23:28 by 我4大白菜
[论文投稿] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 0XLacIJUOj8D 2026-08-24 3/150 2026-08-24 21:59 by BZKMTicpDhFj
[基金申请] 人气不行了 +10 fansofjerry 2026-08-21 10/500 2026-08-24 21:03 by zhanghaozhu
[基金申请] 能否退出参与的面上项目解除限项 +21 koalala 2026-08-24 24/1200 2026-08-24 19:25 by 家与远方
[基金申请] 2026国自然函评费到账 +17 羊腰板 2026-08-21 19/950 2026-08-24 16:52 by iaeyuan
[基金申请] 今日不放榜?网传国自然预计 8 月 27 日可查结果 +17 医学老男孩 2026-08-20 21/1050 2026-08-24 14:21 by refreshing11
[基金申请] 范进中举一文的中心思想 +6 炎黄贵胄 2026-08-22 7/350 2026-08-24 11:58 by 6543yes
[基金申请] 让我中一个面上吧! +13 大萍1987 2026-08-20 16/800 2026-08-24 10:23 by 太傻了
[基金申请] 放榜前的不淡定 20+4 snowwithsea 2026-08-19 17/850 2026-08-24 10:20 by echo8914667
[基金申请] 什么时候开奖? +10 CrisMessi 2026-08-18 11/550 2026-08-24 06:50 by 开心的小狮子
[基金申请] 今天放榜吗? +15 布布和一二 2026-08-19 16/800 2026-08-23 09:55 by 张春生
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 看来今天不会放榜了? +8 chengyan1220 2026-08-21 11/550 2026-08-21 17:52 by dcqxinyang
[基金申请] 时间戳又变了 +13 wuchongjun 2026-08-20 19/950 2026-08-21 17:21 by 紫杉醇
[基金申请] 今天放榜没戏了吧 +9 yuleib84 2026-08-19 11/550 2026-08-21 10:06 by gltch
[基金申请] 重要消息,中午系统在维护 +11 yuleib84 2026-08-18 12/600 2026-08-20 11:09 by xskun
[基金申请] 明天放榜? +5 Shxjjxjkx 2026-08-18 5/250 2026-08-18 18:14 by -大大大大大-
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
信息提示
请填处理意见