24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 2284  |  回复: 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的回帖

huycwork

金虫 (著名写手)

★ ★ ★ ★
dubo(金币+1): 多谢交流 2011-06-04 14:44:46
余泽成(金币+3): 鼓励交流! 2011-06-04 19:32:10
引用回帖:
Originally posted by holmescn at 2011-06-04 09:09:26:
你似乎使用了什么数学方法,而不是直接计算的。能不能讲讲啊。

还有,你对size_t显然存在滥用,虽然size_t是int的一个typedef,但这个主要是为了明确语义才引用的,而你把一些int语义的东西写成size_t,会让 ...

这个问题的原理与求素数的那个程序是一样的,那里的buf是bool的,这里换成size_t罢了,特殊的处理是把每个除数都迭加了进去。还记得欧拉第一题吗?倍数形成的数列是等差数列。
size_t在这的语义是正确的啦,C  和C还是有那么点不同的,具体到这里,size_t是一个索引,索引的类型应该是unsigned的,带符号的版本对应的类型是ssize_t,这在AUPE里面作为一个标准化的内容做了介绍。而且,C  的容器类都用size_t作为size的返回类型,int的索引隐式转换到无符号的size_t时存在陷阱,这个问题可能导致溢出,也可能导致无限循环,作为一个习惯和不要偷懒的建议:size_t是个好类型!
漩涡的中心有一块空地,空空的。
7楼2011-06-04 13:07:17
已阅   回复此楼   关注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的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 0832食品科学与工程学硕282调剂 +6 鱼在水中游a 2026-04-02 9/450 2026-04-05 11:45 by flysky1234
[考研] 数一英一274机械调剂 +5 星陨流霞 2026-04-04 6/300 2026-04-05 11:38 by arrow8852
[考研] 0855求调剂材料 +9 红桃灼灼 2026-04-04 9/450 2026-04-05 10:59 by 啊俊!
[考研] 353求调剂 +10 MayUxw1 2026-04-03 10/500 2026-04-05 09:23 by 无际的草原
[考研] 考研调剂 +5 四川王涛 2026-04-04 5/250 2026-04-04 22:18 by 啵啵啵0119
[考研] 调剂 +9 19945159693 2026-04-03 10/500 2026-04-04 20:16 by dongzh2009
[考研] 考研调剂 +4 美丽的youth_ 2026-04-04 5/250 2026-04-04 17:16 by imissbao
[考研] 293分求调剂,外语为俄语 +6 加一一九 2026-03-31 6/300 2026-04-04 14:57 by 聪明的大松鼠
[考研] 一志愿东北大学085901土木专硕345求调剂 +3 zxt11111 2026-04-04 3/150 2026-04-04 14:21 by 土木硕士招生
[考研] 400分求调剂 +3 尴尬且挠头 2026-04-04 3/150 2026-04-04 08:41 by jp9609
[考研] 303求调剂 +9 DLkz1314. 2026-03-30 9/450 2026-04-03 18:34 by ls刘帅
[考研] 311求调剂一志愿合肥工业大学 +15 秋二十二 2026-03-30 15/750 2026-04-03 10:19 by linyelide
[考研] 一志愿深大085601材料工程专业(专硕)300分可以调剂去哪 +8 10160315 2026-04-02 8/400 2026-04-03 09:36 by hypershenger
[考研] 求调剂!生物与医药专硕 +4 逆转陆先生 2026-04-01 5/250 2026-04-03 08:33 by Jaylen.
[考研] 312求调剂 +4 赊月色 2026-04-02 5/250 2026-04-03 08:21 by fangshan711
[考研] 一志愿北京科技大学材料学硕328分求调剂 +6 1段时间 2026-03-31 7/350 2026-04-02 13:57 by 3041
[考研] 085602化学工程268分蹲调剂 +8 月照花林。 2026-04-01 8/400 2026-04-01 22:08 by 无际的草原
[考研] 考研材料工程351分调剂 +5 整个好的 2026-03-31 5/250 2026-04-01 09:36 by topgun2009
[考研] 吉大生物学326分求调剂 +3 sunnyupup 2026-03-31 3/150 2026-03-31 09:28 by longlotian
[考研] 材料专硕 085600求调剂 +7 BBQ233 2026-03-30 7/350 2026-03-30 17:44 by oooqiao
信息提示
请填处理意见