回复 9楼 Devil_W
这道题 projetceuler 上好像有人发现相邻偶数值项的比例为黄金比例
回复 10楼 Devil_W
第三题的算法还可以优化
程序代码:#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;
}
程序代码:#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;
}
