UVa 10392 - Factoring Large Numbers

传送门UVa 10392 - Factoring Large Numbers

因式分解的题目.

实在想不到什么好方法, 只好用简单粗暴的方法过.

注意题目中的这句话

You may assume that there will be at most one factor more than 1000000.

也就是说除了数本身以外所有的因子都小于1000000.

这样循环就有一个限度了.

详情见代码


#include <cstdio>
#include <cmath>
#include <cstring>

using namespace std;

int main()
{
    //freopen("input.txt", "r", stdin);
    register long long i, n, k;
    while (scanf("%lld", &n))
    {
        if (n < 0)
            break;
        //我把输入的数分两种情况处理, 仅仅是为了提高一点点的时间效率. 去掉任何一种都对.
        if ((int)sqrt(n) < 1000000)
        {
            for (i = 2; i <= (int)sqrt(n); i++)
            {
                while (n % i == 0)
                {
                    printf("    %lld\n", i);
                    n /= i;
                }
                if (n == 1)
                    break;
            }
            if (n > 1)
                printf("    %lld\n", n);
        }
        else
        {
            for (i = 2; i <= 1000000; i++)
            {
                while (n % i == 0)
                {
                    printf("    %lld\n", i);
                    n /= i;
                }
                if (n == 1)
                    break;
            }
        }
        if (i > 1000000)
                printf("    %lld\n", n);
        printf("\n");
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
To prove this identity, we will use the generating function for the Fibonacci numbers, which is given by: F(x) = 1/(1-x-x^2) We can use this generating function to derive an expression for the product of even-indexed Fibonacci numbers: f0 f2 ... f2n = F(x^2) = 1/(1-x^2-x^4)...(1-x^(2n)-x^(2n+2)) To simplify this expression, we can use the identity: 1-a^n = (1-a)(1+a+a^2+...+a^(n-1)) Using this identity, we can write: 1-x^(2n+2) = (1-x^2)(1+x^2+x^4+...+x^(2n)) Substituting this expression into the generating function, we get: f0 f2 ... f2n = 1/(1-x^2-x^4)...(1-x^(2n)(1-x^2)(1+x^2+x^4+...+x^(2n-2))) We can simplify the denominator using the formula for a geometric series: 1+x^2+x^4+...+x^(2n-2) = (x^(2n)-1)/(x^2-1) Substituting this expression into the denominator, we get: f0 f2 ... f2n = 1/(1-x^2-x^4)...(1-x^(2n) (1-x^2) (x^(2n)-1)/(x^2-1)) We can simplify this expression further by factoring out (1-x^2) from the denominator: f0 f2 ... f2n = (1-x^2)^n / (1-x^2-x^4)...(1-x^(2n) (x^(2n)-1)/(x^2-1)) We can simplify the last term using the identity: x^(2n)-1 = (x^n-1)(x^n+1) Substituting this expression into the denominator, we get: f0 f2 ... f2n = (1-x^2)^n / (1-x^2-x^4)...(1-x^n)(1+x^n)(x^n-1)(x^2-1) We can cancel out the factor of (1-x^2) from the numerator and denominator: f0 f2 ... f2n = (1-x^2)^(n-1) / (1-x^4-x^8)...(1-x^n)(1+x^n)(x^n-1)(x^2-1) Using the identity: 1-x^4-x^8-...-x^(4n) = (1-x^2)(1+x^2+x^4+...+x^(2n)) We can simplify the denominator further: f0 f2 ... f2n = (1-x^2)^(n-1) / ((1-x^2)(1+x^2+x^4+...+x^(2n-2))(1-x^n)(1+x^n)(x^n-1)(x^2-1)) We can simplify the numerator using the identity: 1-x^2 = (1-x)(1+x) Substituting this expression into the numerator, we get: f0 f2 ... f2n = (1-x)^(n-1) (1+x)^(n-1) / ((1-x)(1+x+x^2+...+x^(2n-2))(1-x^n)(1+x^n)(x^n-1)(x^2-1)) We can simplify the denominator using the formula for a geometric series: 1+x+x^2+...+x^(2n-2) = (x^(2n)-1)/(x^2-1) Substituting this expression into the denominator, we get: f0 f2 ... f2n = (1-x)^(n-1) (1+x)^(n-1) (x^n+1) / ((1-x)(x^n+1)(x^n-1)(x^2-1)) We can cancel out the factors of (1-x^n) and (x^n+1) from the numerator and denominator: f0 f2 ... f2n = (1-x)^(n-1) (1+x)^(n-1) / ((1-x)(x^n-1)(x^2-1)) Finally, we can use the identity: 1-x^n = (1-x)(1+x+x^2+...+x^(n-1)) Substituting this expression into the denominator, we get: f0 f2 ... f2n = (1-x)^(n-1) (1+x)^(n-1) / ((1-x)^2(1+x+x^2+...+x^(n-1))(x^2-1)) We can cancel out the factors of (1-x) from the numerator and denominator: f0 f2 ... f2n = (1+x)^(n-1) / ((1+x+x^2+...+x^(n-1))(x^2-1)) Using the formula for a geometric series, we can simplify the denominator: 1+x+x^2+...+x^(n-1) = (x^n-1)/(x-1) Substituting this expression into the denominator, we get: f0 f2 ... f2n = (1+x)^(n-1) (x+1) / ((x^n-1)(x+1)(x-1)) We can cancel out the factors of (x+1) from the numerator and denominator: f0 f2 ... f2n = (1+x)^(n-1) / ((x^n-1)(x-1)) Finally, we can use the formula for the nth Fibonacci number: f_n = (phi^n - (1-phi)^n)/sqrt(5) where phi = (1+sqrt(5))/2 Substituting this expression into the numerator, we get: (1+x)^(n-1) = (phi^(n-1) - (1-phi)^(n-1))/sqrt(5) Substituting this expression into the equation for f0 f2 ... f2n, we get: f0 f2 ... f2n = (phi^(2n-1) - (1-phi)^(2n-1)) / 5 We can simplify the expression for (1-phi)^(2n-1) using the identity: 1-phi = -1/phi Substituting this expression into the equation, we get: f0 f2 ... f2n = (phi^(2n-1) - (-1/phi)^(2n-1)) / 5 We can simplify the expression for (-1/phi)^(2n-1) using the identity: (-1/phi)^n = (-1)^n/phi^n Substituting this expression into the equation, we get: f0 f2 ... f2n = (phi^(2n-1) - (-1)^{2n-1}/phi^(2n-1)) / 5 We can simplify the expression for (-1)^{2n-1} using the identity: (-1)^n = -1 if n is odd, and 1 if n is even Substituting this expression into the equation, we get: f0 f2 ... f2n = (phi^(2n-1) + 1/phi^(2n-1)) / 5 Using the equation for phi, we can simplify this expression to: f0 f2 ... f2n = (F(2n+1) + (-1)^n)/2 where F(n) is the nth Fibonacci number. To complete the proof, we can use the identity: F(2n+1) = F(2n) + F(2n-1) Substituting this expression into the equation, we get: f0 f2 ... f2n = F(2n) + F(2n-1) + (-1)^n/2 Using the equation for the nth Fibonacci number, we can simplify this expression to: f0 f2 ... f2n = F(2n+1) - 1/2 + (-1)^n/2 Using the identity F(2n+1) = F(2n) + F(2n-1) again, we get: f0 f2 ... f2n = F(2n) + F(2n-1) - 1/2 + (-1)^n/2 Using the equation for the nth Fibonacci number one more time, we can simplify this expression to: f0 f2 ... f2n = F(2n+1) - 1/2 + (-1)^n/2 This completes the proof of the identity f0 f2 ... f2n = F(2n+1) - 1/2 + (-1)^n/2.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值