zoukankan      html  css  js  c++  java
  • Topcoder SRM 643 Div1 250<peter_pan>

    Topcoder SRM 643 Div1 250

    Problem

      给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*......*pn,我们假设p0,p1,...,pn是单调不降的,那么v里存储的是下标为偶数 的N的质因数p0,p2,p4,...,p(2k)。现在要求写一个程序,返回一个vector<long long>ans; ans里存储的是p0,p1,p2,...,pn.

     

    Limits

    Time Limit(ms): 2000 

    Memory Limit(MB): 256

    N: [2,10^18]

     

    Solution

      将N不断除去v里的数(N/=v[i];)后得到一个新的N,记为N1。然后将 N1分解质因数。在[1,10^6]内扫描,将N1分解,得到新的N1,记为N2。如果N2 不为1,可证明N2一定为素数,加入ans。将ans排序,返回。

     

    More

       会担心下面一种情况发生,N=2*p1,p1是一个级别为1e17的素数。所以在分解质因数的时候,不可以用O(N^0.5)的算法,否则会超时,而用在[1,10^6]内扫描来分解N1。下面说明N2一定为素数,考虑N的 质因数,最多存在两个质因数pi,pj会大于10^6(其它的质因数均小于或等于10^6,则在从[1,10^6]内扫描来分解N1时就已经被找到)。假 设存在两个质因数pi,pj大于10^6,那么由于给的v是有序的,pi,pj又是所有质因数中最大的两个,所以pi,pj必有且只有一个出现在v中,因 此N2=pi或pj,N2为素数;假设只存在一个pi大于10^6,那么N2=pi,N2为素数。

     

    Complexity

    Time Complexity: O(1e6)

    Memory Complexity: Very small

     

    Source

    Topcoder SRM 643 Div1 250

     

    Code

    Topcoder SRM 643 Div1 250 From My Github

     

     

  • 相关阅读:
    event事件对象
    移动端布局模式
    事件冒泡和事件捕获
    移动web缓存介绍 ---摘录
    this的运用
    第一次演讲准备篇--css
    jquery内部技术分析
    java 编程思想笔记(五)——接口
    java 编程思想笔记(四)——多态
    java 编程思想笔记(三)——类的复用
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4190901.html
Copyright © 2011-2022 走看看