| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2395 人关注过本帖
标题:projecteuler.net 系列问题转贴
只看楼主 加入收藏
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 9楼 Devil_W
这道题 projetceuler 上好像有人发现相邻偶数值项的比例为黄金比例
2011-06-23 15:15
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 10楼 Devil_W
第三题的算法还可以优化
2011-06-23 15:26
jimmywood
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:30
专家分:109
注 册:2009-8-10
收藏
得分:7 
q3
程序代码:
#include <stdio.h>
#include <math.h>

int prime[1024];
int primeNum = 0;

//只能用于判断递增的数, 同时生成质数表
bool IsPrime(int x)
{
    if (x == 2)
    {
        prime[primeNum++] = x;
        return true;
    }
   
    int idx = 0, n = (int)sqrt((float)x) + 1;
    for (; prime[idx] < n; idx++)
    {
        if (x % prime[idx] == 0)
        {
            return false;
        }
    }

    prime[primeNum++] = x;
    return true;
}

int main()
{
    long long num = 600851475143;
    int idx = 2, ret = -1;
   
    for( ; idx <= num; idx++)
    {
        if (IsPrime(idx))
        {
            while (num % idx == 0)    // 可能有相同的质因子
            {
                num /= idx;
                ret = idx;
            }
        }
    }

    printf("%d\n", ret);

    return 0;
}


 

[ 本帖最后由 jimmywood 于 2011-6-23 17:16 编辑 ]
2011-06-23 17:14
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用voidx在2011-6-23 15:26:29的发言:

第三题的算法还可以优化


数据规模太小了,再优化,也看不出来。
2011-06-23 17:42
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 14楼 Devil_W
那倒是,这种优化就是个蛋疼的嗜好
2011-06-23 17:51
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
要沉没了,顶一顶。
为什么贴代码的人这么少
2011-06-24 15:35
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
第一题很水,范围太小了,数学方法没考虑过,但是至少dp可以做到O(logN) (大数基本运算的复杂度不考虑在内)
第二题也很水,也是范围太小了,如果将大数基本运算的复杂度不考虑在内,可以做到O(logN)
至于第三题,分解质因数的优秀算法google一下很多,我记得算法导论上也有。

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2011-06-26 17:35
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用卧龙孔明在2011-6-26 17:35:18的发言:

第一题很水,范围太小了,数学方法没考虑过,但是至少dp可以做到O(logN) (大数基本运算的复杂度不考虑在内)
第二题也很水,也是范围太小了,如果将大数基本运算的复杂度不考虑在内,可以做到O(logN)
至于第三题,分解质因数的优秀算法google一下很多,我记得算法导论上也有。



第一题我的复杂度应该是O(1)吧。跟 N 是没有关系的最后的计算。
2011-06-26 18:46
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
囧,对,第一题如果数学方法可以O(1)

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2011-06-26 19:38
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
有趣的题。第一题第二题很简单,下面给出算法。第三题大数的因式分解,我也没有很好的算法,和大家属于一个数量级。
正在看非诚勿扰,呵呵如果大家感兴趣,一会儿解释算法。
程序代码:
#include<stdio.h>
#include<math.h>

#define SQRT_5    2.2360679774997896964091736687313
#define A        ((1 + SQRT_5) / 2)
#define B        ((1 - SQRT_5) / 2)


int Test1(int n) //计算1-N以内(包括N)能被3和5整除的整数的和
{
    int i, a3, a5, a15;
    //n--;//如果不包括N请取消这行的注释
    i = n / 3;
    a3 = (3 * (i + 1) * i) >> 1;
    i = n / 5;
    a5 = (5 * (i + 1) * i) >> 1;
    i = n / 15;
    a15 = (15 * (i + 1) * i) >> 1;
    return a3 + a5 - a15;
}

int Test2(int a) //计算小于等于a的fibonacci数列中的值为偶数的项的和
{
    double x, y, sf;
    int n, t;
    
    x = log(SQRT_5 * a) / log(A);
    x += 0.5;
    n = (int)x;
    y = (pow(A, n) - pow(B, n)) / SQRT_5;
    y += 0.5;
    t = (int)y;
    if(t > a) n--;
    sf = ((SQRT_5 + 1) / (SQRT_5 - 1) * (pow(A, n) - 1) - (1 - SQRT_5) / (1 + SQRT_5) * (1 - pow(B, n))) / SQRT_5;
    sf += 0.5;
    
    return ((int)sf) / 2;
}

int main()
{
    printf("%d\n", Test1(1000));
    printf("%d\n", Test2(4000000));
    return 0;
}

重剑无锋,大巧不工
2011-06-26 22:11
快速回复:projecteuler.net 系列问题转贴
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014188 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved