zoukankan      html  css  js  c++  java
  • BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5108

    题目意思:给出一个数正整数 N,N <= 1e9,现在需要找出一个最少的正整数 M,使得 N/M 是素数。如果找不到就输出0.

      一开始有想过将所有 <= 1e9 的素数求出来的,不过绝对超时就放弃了;然后就开始从题目中挖掘简便的处理方法。受到求素数的方法启发,枚举的因子 i 如果在 i * i <= N 之内都没有找到符合条件的素数,那么那些 > N 的因子就更不可能了。于是时间复杂度就降了下来。接着是排除那些 N 除不尽的因子,即 N % i != 0。剩下的就是那些能除得尽的因子,枚举 N / i 和 N / (N/i),较小的那个先保存下来,直到枚举完所有因子,最少的那个就是答案。

        wa了3次......

        第一次是遗漏:如果 N/i 是 N 的因子,那么 N/(N/i) 也是 N 的因子。

        第二次是错误地认为:如果从小到大枚举因子,那么第一次遇到的就是所求的最少正整数 M。举个例子就知道错了。例如 12,答案为3。如果这样想,求出来的结果会是6,因为如果按从小到大的顺序枚举,当遇到 2 的时候,因子分别是 2 和6,而12/6 = 2 是素数。

        第三次就是保存结果的时候只保存 N/(N/i)较小的,脑一定是注水了 = =,i 也是需要的 !!

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 using namespace std;
     6 
     7 bool is_prime(int x)
     8 {
     9     if (x == 1)
    10         return false;
    11     if (x == 2)
    12         return true;
    13     for (int i = 2; i * i <= x; i++)
    14     {
    15         if (x % i == 0)
    16             return false;
    17     }
    18     return true;
    19 }
    20 
    21 int main()
    22 {
    23     int n;
    24     while (scanf("%d", &n) != EOF)
    25     {
    26         int ans = 0;
    27         for (int i = 1; i * i <= n; i++)
    28         {
    29             if (n % i)
    30                 continue;
    31             if (is_prime(n/i))
    32                 ans = (ans != 0 ? min(ans, i) : i);
    33             if (is_prime(n/(n/i)))
    34                 ans = (ans != 0 ? min(ans, n/i) : n/i);
    35         }
    36         printf("%d
    ", ans);
    37     }
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    【eoe资源】通过片段创建灵活的用户界面
    史上最全的Android开发索引帖
    临时记录
    五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
    【转】深入探讨 Android 传感器
    Java Collections Framework Java集合框架List,Map,Set等全面介绍之概要篇
    谷歌 G1 android APK安装器 离线安装软件
    【转】請為你的 Android 程式加上 obfuscation 吧!
    【转】Android Toolchain与Bionic Libc
    用VirtualBox在XP环境下虚拟Ubuntu的过程
  • 原文地址:https://www.cnblogs.com/windysai/p/4115809.html
Copyright © 2011-2022 走看看