zoukankan      html  css  js  c++  java
  • PE3 Largest prime factor(最大素数因子)

    前言PEProject Eluer)是学Mathematica(以后我简称Mma)接触到的,不用提交代码,只用提交答案的答题网站。PE的题目会给出C++Mma代码实现,以此学习Mma(已经被它的简洁给折服了..)。

     

    题目

    The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number 600851475143 ?

    https://projecteuler.net/problem=3

    分析

    题目求由数的因式分解,求因式中最大值。

    看到prime,就往素数方面去想了,思路是,把N用一个素数p去除,缩小N,p等于下一个素数,循环,直到N缩小到1为止

    Code

     

    #include<iostream>

     

    using namespace std;

    int nextPrime(int n);

    bool isPrime(int n);

    int MaxFct(__int64 n);

    int main(){

        __int64    n = 600851475143;

        cout << MaxFct(n);

        return 0;

    }

    int MaxFct(__int64 n){

        int i = 0;

        int maxFct = 1;

        while (n>1)

        {

           i = nextPrime(i);

           if (n%i == 0){

               n /= i;

               maxFct = i > maxFct ? i : maxFct;

           }

     

        }

        return maxFct;

    }

    int nextPrime(int n)

    {

        n++;

        while (!isPrime(n))

           n++;

        return n;

    }

    bool isPrime(int n){

        int a = sqrt(n);

        bool isP = true;

        if (n < 2){

           return false;

        }

        int t;

        for (int i = 2; i <= a; i++)

        {

           t = (n % i);

           if ((n % i) == 0){

               isP = false;

               break;

           }

        }

        return isP;

    }

     

    Mathematica  

    FactorInteger[600851475143] // Flatten // Max

  • 相关阅读:
    分别给Python类和实例增加属性和方法
    什么是tcp, udp 以及它们的区别
    输入www.baidu.com后的过程详解
    tcp 三次握手,四次挥手
    python sort 排序的使用
    mysql数据脏读、幻读、不可重复读
    python 之集合的删除
    CompletableFuture保证线程同步
    多线程动态传参问题
    git冲突的解决与版本回退遇到的问题
  • 原文地址:https://www.cnblogs.com/dingblog/p/4500419.html
Copyright © 2011-2022 走看看