zoukankan      html  css  js  c++  java
  • hdu5108枚举因子求最小的m

    题意:
         给一个n(<=10Y),然后让找到一个最小的m使得n/m是一个素数.


    思路:
          先用sqrt(n)的时间把所有的因子都求出来,然后在排序,枚举,就行了,这个题目这么做的话,要是仔细算一下时间复杂度估计会跪,但是题目说大数据不多,这种说法的前提下一般临街的时间复杂度都要试一试,还有就是在判断素数和枚举的时候写的别太挫,不然很可能会超时。


    #include<algorithm>
    #include<stdio.h>
    #include<math.h>


    using namespace std;




    int YZ[100000] ,yzs;


    void DB(int now)
    {
       yzs = 0;
       int max = (int)sqrt(now);
       for(int i = 1 ;i <= max ;i ++)
       {
          if(now % i == 0) 
          {
             YZ[++yzs] = i;
             YZ[++yzs] = now / i;
          }
       }
       if(max * max == now)
       yzs --;
    }


    bool jude(int now)
    {
       int max = (int)sqrt(now);
       for(int i = 2 ;i <= max ;i ++)
       if(now % i == 0) return 0;
       return 1;
    }


    int main ()
    {
       int n ,i;
       while(~scanf("%d" ,&n))
       {
          if(n <= 1)
          {
             printf("0 ");
             continue;
          }
          DB(n);
          sort(YZ + 1 ,YZ + yzs + 1);
          int mk = 0;
          for(i = 1 ;i <= yzs && !mk;i ++)
          {
             int now = n / YZ[i];
             if(jude(now))
             {
                printf("%d " ,YZ[i]);
                mk = 1;
             }
          }
          if(!mk) printf("0 ");
       }
       return 0;
    }
                

  • 相关阅读:
    Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
    xss跨站脚本和csrf 跨站请求伪造
    随机32位字符
    Demura说明
    Demura介绍
    C# 调用c++编译dll
    数据结构之-数组
    C# 深克隆和浅克隆
    弹性盒子的知识点
    行为型设计模式之-观察者模式
  • 原文地址:https://www.cnblogs.com/csnd/p/12062608.html
Copyright © 2011-2022 走看看