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;
    }
                

  • 相关阅读:
    C#数据类型
    面试常备题素数的判断
    Eclipse输入命令行参数
    Socket编程第一步PC上服务器回显客户端发送的字符串
    C# 格式化输出
    截止至2004年8月1日全球CCIE人数统计
    什么是3G?
    DoS 拒绝服务攻击专题
    我的Blog音乐版~~
    国庆啊~~累得我好苦啊~~~
  • 原文地址:https://www.cnblogs.com/csnd/p/12062607.html
Copyright © 2011-2022 走看看