24小时热门版块排行榜    

查看: 3719  |  回复: 23
本帖产生 7 个 程序强帖 ,点击这里进行查看

wangww2011

木虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2, 程序强帖+1): 谢谢参与交流! 2011-05-17 22:30:26
楼上的分析的很多阿
还是直接写代码吧
最简单就是遍历了,其实也不是很慢,2秒多一点
优化一下也没有快多少,0.1s
先看运行结果
CODE:
triangle_num=76576500
slow version, elapsed time=2.060000 seconds.
triangle_num=76576500
normal version, elapsed time=0.090000 seconds.

代码:
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 euler12(int a, long n){
  static int last_a=0;
  static int count=1;
  int tmp_count=0;
  int i=0;
  
  for(i=a;i     if(n%i==0){
      if(i>last_a){
         last_a=i;
         tmp_count=count;
         count=2;
         return tmp_count*euler12(i,n/i);
       }
      
       count++;      
       return euler12(i,n/i);
    }
  }


  tmp_count=count;
  count=1;
  last_a=0;

  if (i*i-n==0){
    return 3*tmp_count;
  } else {
    return 2*tmp_count;
  }
}



int slow(int n){
  int i=0;
  int count=0;
  for(i=2;i<=sqrt(n);i++){
    if(n%i==0){
      count++;
     }
  }

  if (i*i-n==0) {
    return 2*count+1;
  }

  return 2*(count+1);
}


int main(void){
  long triangle_num=1;
  int i=2;
  int divisor_num=500;
  

  TIMERSTART;

  do {
    triangle_num+=i;
    i+=1;
  }while(slow(triangle_num)
  printf("triangle_num=%ld\n slow version, ",triangle_num);
  TIMERSTOP;



  start_time = clock();  
  triangle_num=1;
  i=2;

  do {
    triangle_num+=i;
    i+=1;
  }while(euler12(2,triangle_num)
  printf("triangle_num=%ld\n normal version, ",triangle_num);
  TIMERSTOP;

  return 0;
}

11楼2011-05-17 16:04:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2): 谢谢参与交流! 2011-05-17 22:30:42
引用回帖:
Originally posted by libralibra at 2011-05-17 15:55:18:
sudo兄7楼的算法再解释下?
>> factor(75676500)
ans =
     2     2     3     3     5     5     5    67   251

照此,75676500 = 2^2*3^2*5^3*67^1*251^1
它的因子个数是 3*3*4*2*2 = 144,也不是50 ...

我算的是  76576500
76576500=2*2*3*3*5*5*5*7*11*13*17
所以应该有3*3*4*2*2*2*2=576个因数
12楼2011-05-17 16:11:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★
余泽成(金币+2): 谢谢参与交流! 2011-05-17 22:30:52
引用回帖:
Originally posted by wangww2011 at 2011-05-17 16:11:33:
我算的是  76576500
76576500=2*2*3*3*5*5*5*7*11*13*17
所以应该有3*3*4*2*2*2*2=576个因数

好奇怪啊,2个分解质因数都对,这不是与唯一分解定理矛盾了吗?

matlab的factor怎么会给出第2个呢?
CODE:
>>> 2*2*3*3*5*5*5*7*11*13*17
76576500
>>> 2*2*3*3*5*5*5*67*251
75676500

这是factor的解释
CODE:
f = factor(n) returns a row vector containing the prime factors of n.

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
13楼2011-05-17 17:50:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by libralibra at 2011-05-17 17:50:36:
好奇怪啊,2个分解质因数都对,这不是与唯一分解定理矛盾了吗?

matlab的factor怎么会给出第2个呢?

[code] >>> 2*2*3*3*5*5*5*7*11*13*17
76576500
>>> 2*2*3*3*5*5*5*67*251
7567650 ...

这是两个不同的数嘛...
14楼2011-05-17 18:10:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

引用回帖:
Originally posted by sudo at 2011-05-17 18:10:56:
这是两个不同的数嘛...

哈哈,多谢提醒,我当时保存答案的时候是手写的,写错了数字
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
15楼2011-05-17 18:15:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+3, 程序强帖+1): 鼓励参与交流! 2011-05-19 19:16:20
CODE:
# -*- coding: utf-8 -*-

# 初始化一个质数表
i = 0
primes = range(2, 100)
while i < len(primes):
    primes = [x for x in primes if x == primes[i] or x % primes[i] != 0]
    i = i + 1

def numbersOfFactors(n):
    """计算n的因子数
    使用了sudo说的计算方法
    加上一个质数分解
    """
    factorNumbers = 1
    factorTimes = 0
    i = 0
    while i < len(primes):
        if n % primes[i] == 0:
            factorTimes += 1
            n /= primes[i]
            continue
        else:
            if factorTimes != 0:
                factorNumbers *= factorTimes + 1
                factorTimes = 0
            i = i + 1
            if n == 1:
                break
    return factorNumbers

# 从第三个三角数开始算,只算第奇数个三角数
n = 3
while numbersOfFactors(n*(n+1)/2) < 500:
    n += 2

# 为防止对偶数个三角数的遗漏,有最后这个计算
if numbersOfFactors(n*(n-1)/2) > 500:
    print n*(n-1)/2
else:
    print n*(n+1)/2

写了个质数分解版的。速度是很快啊!

[ Last edited by holmescn on 2011-5-19 at 16:34 ]
16楼2011-05-18 17:52:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baiyuefei

版主 (文学泰斗)

风雪

优秀版主优秀版主优秀版主文献杰出贡献优秀版主优秀版主优秀版主文献杰出贡献优秀版主优秀版主优秀版主优秀版主文献杰出贡献优秀版主优秀版主优秀版主优秀版主优秀版主优秀版主

17楼2011-05-18 18:59:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+1): 鼓励参与交流! 2011-05-19 19:16:36
引用回帖:
Originally posted by holmescn at 2011-05-18 17:52:06:
虽然有了因数分解这个方法,可以快速的知道一个三角数有多少个整除数,但好像还只胡一个一个算,一个一个分解。这太慢了。

显然第n个三角数就是n(n+1)/2。令这个数为a则可以解得n=(sqrt(8a+1)-1)/2

这就要求 ...

辗转相除法可以计算gcd,计算完之后两边再单独分解即可。
漩涡的中心有一块空地,空空的。
18楼2011-05-18 19:48:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

匿名

用户注销 (小有名气)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+3, 程序强帖+1): 鼓励交流!欢迎常来程序语言版! 2011-05-24 12:36:56
本帖仅楼主可见
19楼2011-05-24 09:00:01
已阅   回复此楼   编辑   查看我的主页

holmescn

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by fan6cy at 2011-05-24 09:00:01:
首先列出matlab计算的结果和时间:
y =

    76576500


time =

    4.5780
如果你觉得我的程序还不错,请继续往下看:
本程序一共有三个程序组成,fibon.m,nfactor.m,ruler12.m
fibon.m
function y ...

推荐使用BBCode重新编辑你的代码,让代码更好看,更易读。
20楼2011-05-24 09:51:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 libralibra 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 301求调剂 +10 yy要上岸呀 2026-03-17 10/500 2026-03-21 03:14 by JourneyLucky
[考研] 083200学硕321分一志愿暨南大学求调剂 +3 innocenceF 2026-03-17 3/150 2026-03-21 02:35 by JourneyLucky
[考研] 279分求调剂 一志愿211 +11 chaojifeixia 2026-03-19 12/600 2026-03-21 01:49 by 星空星月
[考研] 297求调剂 +9 戏精丹丹丹 2026-03-17 9/450 2026-03-21 01:49 by JourneyLucky
[考研] 271材料工程求调剂 +8 .6lL 2026-03-18 8/400 2026-03-21 00:58 by JourneyLucky
[考研] 311求调剂 +5 冬十三 2026-03-18 5/250 2026-03-21 00:16 by JourneyLucky
[考研] 南京大学化学376求调剂 +3 hisfailed 2026-03-19 6/300 2026-03-20 23:43 by hisfailed
[考研] 295求调剂 +4 一志愿京区211 2026-03-18 6/300 2026-03-20 23:41 by JourneyLucky
[考研] 一志愿南京理工大学085701资源与环境302分求调剂 +4 葵梓卫队 2026-03-18 6/300 2026-03-20 23:02 by JourneyLucky
[考研] 材料学硕297已过四六级求调剂推荐 +11 adaie 2026-03-19 11/550 2026-03-20 21:30 by laoshidan
[考研] 265求调剂 +12 梁梁校校 2026-03-19 13/650 2026-03-20 21:01 by 无际的草原
[考研] 261求B区调剂,科研经历丰富 +3 牛奶很忙 2026-03-20 4/200 2026-03-20 19:34 by JourneyLucky
[考研] 材料与化工专硕调剂 +7 heming3743 2026-03-16 7/350 2026-03-20 19:31 by zhukairuo
[考研] 328求调剂,英语六级551,有科研经历 +4 生物工程调剂 2026-03-16 12/600 2026-03-19 11:10 by 生物工程调剂
[考研] 085601专硕,总分342求调剂,地区不限 +5 share_joy 2026-03-16 5/250 2026-03-18 14:48 by haxia
[考研] 考研求调剂 +3 橘颂. 2026-03-17 4/200 2026-03-17 21:43 by 有只狸奴
[考研] 有没有道铁/土木的想调剂南林,给自己招师弟中~ +3 TqlXswl 2026-03-16 7/350 2026-03-17 15:23 by TqlXswl
[考研] 一志愿南京大学,080500材料科学与工程,调剂 +4 Jy? 2026-03-16 4/200 2026-03-17 11:02 by gaoqiong
[考研] [导师推荐]西南科技大学国防/材料导师推荐 +3 尖角小荷 2026-03-16 6/300 2026-03-16 23:21 by 尖角小荷
[考研] 0854控制工程 359求调剂 可跨专业 +3 626776879 2026-03-14 9/450 2026-03-16 17:42 by 626776879
信息提示
请填处理意见