精华内容
下载资源
问答
  • 算法 - 判断一个数是不是2的n次幂

    万次阅读 多人点赞 2019-02-26 10:31:24
    设要判断的数是无符号整数X。 首先判断X是否为0,如果为0则不是2的n次幂,返回。 将X和X-1进行按位“与”操作,如果结果是0,则说明这个数是2的n次幂;如果结果非0,则说明这个数不是2的n次幂。 ...

    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 

    设要判断的数是无符号整数X。

    首先判断X是否为0,如果为0则不是2的n次幂,返回。

    将X和X-1进行按位“与”操作,如果结果是0,则说明这个数是2的n次幂;如果结果非0,则说明这个数不是2的n次幂。

    展开全文
  • 1)直观判断法最直观的方法,根据定义,因为质数除了1和本身之外没有其他约数,所以判断n是否为质数,根据定义直接判断从2到n-1是否存在n的约数即可。C++代码如下:bool isPrime_1( int num ) { int t...
    定义:约数只有1和本身的整数称为质数,或称素数。
    计算机或者相关专业,基本上大一新生开始学编程都会接触的一个问题就是判断质数,下面分享几个判断方法,从普通到高效。

    1)直观判断法

    最直观的方法,根据定义,因为质数除了1和本身之外没有其他约数,所以判断n是否为质数,根据定义直接判断从2到n-1是否存在n的约数即可。C++代码如下:

    bool isPrime_1( int num )
    {
        int tmp =num- 1;
        for(int i= 2;i <=tmp; i++)
          if(num %i== 0)
             return 0 ;
        return 1 ;
    }
    

    2)直观判断法改进

    上述判断方法,明显存在效率极低的问题。对于每个数n,其实并不需要从2判断到n-1,我们知道,一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n),据此,上述代码中并不需要遍历到n-1,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数。C++代码如下:
    bool isPrime_2( int num )
    {
         int tmp =sqrt( num);
         for(int i= 2;i <=tmp; i++)
            if(num %i== 0)
              return 0 ;
         return 1 ;
    }

    3)另一种方法

    方法(2)应该是最常见的判断算法了,时间复杂度O(sqrt(n)),速度上比方法(1)的O(n)快得多。最近在网上偶然看到另一种更高效的方法,暂且称为方法(3)吧,由于找不到原始的出处,这里就不贴出链接了,如果有原创者看到,烦请联系我,必定补上版权引用。下面讲一下这种更快速的判断方法;
    首先看一个关于质数分布的规律:大于等于5的质数一定和6的倍数相邻。例如5和7,11和13,17和19等等;

    证明:令x≥1,将大于等于5的自然数表示如下:
    ······ 6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1 ······
    可以看到,不在6的倍数两侧,即6x两侧的数为6x+2,6x+3,6x+4,由于2(3x+1),3(2x+1),2(3x+2),所以它们一定不是素数,再除去6x本身,显然,素数要出现只可能出现在6x的相邻两侧。这里有个题外话,关于孪生素数,有兴趣的道友可以再另行了解一下,由于与我们主题无关,暂且跳过。这里要注意的一点是,在6的倍数相邻两侧并不是一定就是质数。
    此时判断质数可以6个为单元快进,即将方法(2)循环中i++步长加大为6,加快判断速度,原因是,假如要判定的数为n,则n必定是6x-1或6x+1的形式,对于循环中6i-1,6i,6i+1,6i+2,6i+3,6i+4,其中如果n能被6i,6i+2,6i+4整除,则n至少得是一个偶数,但是6x-1或6x+1的形式明显是一个奇数,故不成立;另外,如果n能被6i+3整除,则n至少能被3整除,但是6x能被3整除,故6x-1或6x+1(即n)不可能被3整除,故不成立。综上,循环中只需要考虑6i-1和6i+1的情况,即循环的步长可以定为6,每次判断循环变量k和k+2的情况即可,理论上讲整体速度应该会是方法(2)的3倍。代码如下:
    bool isPrime_3( int num )
    {
                     //两个较小数另外处理
                     if(num ==2|| num==3 )
                                     return 1 ;
                     //不在6的倍数两侧的一定不是质数
                     if(num %6!= 1&&num %6!= 5)
                                     return 0 ;
                     int tmp =sqrt( num);
                     //在6的倍数两侧的也可能不是质数
                     for(int i= 5;i <=tmp; i+=6 )
                                     if(num %i== 0||num %(i+ 2)==0 )
                                                     return 0 ;
                     //排除所有,剩余的是质数
                     return 1 ;
    }
    
    算法性能测试:
    编写测试代码,使用较多数据测试比较几种方法的判断效率,数据量40w,代码如下:
    #include <iostream>
    #include <string>
    #include <ctime>
    #include <vector>
    using namespace std;
    bool isPrime_1( int num );
    bool isPrime_2( int num );
    bool isPrime_3( int num );
    int main()
    {
                     int test_num =400000;
                     int tstart ,tstop; //分别记录起始和结束时间
                     //测试第一个判断质数函数
                     tstart=clock ();
                     for(int i= 1;i <=test_num; i++)
                                     isPrime_1(i );
                     tstop=clock ();
                     cout<<"方法(1)时间(ms):" <<tstop- tstart<<endl ;//ms为单位
                     //测试第二个判断质数函数
                     tstart=clock ();
                     for(int i= 1;i <=test_num; i++)
                                     isPrime_2(i );
                     tstop=clock ();
                     cout<<"方法(2)时间(ms):" <<tstop- tstart<<endl ;
                     //测试第三个判断质数函数
                     tstart=clock ();
                     for(int i= 1;i <=test_num; i++)
                                     isPrime_3(i );
                     tstop=clock ();
                     cout<<"方法(3)时间(ms):" <<tstop- tstart<<endl ;
                     cout<<endl ;
                     system("pause" );
                     return 0 ;
    }
    

    运行结果如下;


    可以看出,判断到40w,效率上方法(1)明显要差得多,方法(2)和方法(3)在这种测试数量下时间相差2倍多

    单独对比方法(2)和(3),数据量加到1000w,结果如下:

    可以看出,方法(2)和方法(3)在这种测试数量下时间相差依然是2倍多,不过已经是很不错的提升。
    对了,附上运行环境,CPU-i5-3210,内存4G,win7,vs2012。

    好了,判断质数的方法暂时就到这里,不足之处欢迎各道友指出。





    展开全文
  • Tushare Pro判断股市是否开盘

    万次阅读 2020-12-30 14:30:26
    判断当前日期大盘是否开盘 is_open = 1 开盘 is_open = 0 不开盘 :return: """ DatetimeNOW = datetime.datetime.now().strftime('%Y%m%d') ts.set_token('08c2ea97dfcff2586e37d我是马赛克86a7e9f170be7

    Tushare Pro官网:https://waditu.com/
    注册之后使用自己的token即可查询数据。

    import tushare as ts
    import datetime
    def isopen():
        """
        判断当前日期大盘是否开盘
        is_open = 1  开盘
        is_open = 0  不开盘
        :return:
        """
        DatetimeNOW = datetime.datetime.now().strftime('%Y%m%d')
        ts.set_token('08c2ea97dfcff2586e37d我是马赛克86a7e9f170be772aae14fe8eabd5c')
        pro = ts.pro_api()
        cal_date_pd = pro.trade_cal()
        cal_date_pd_daterow = cal_date_pd[cal_date_pd['cal_date'].isin([DatetimeNOW])]
        is_open = cal_date_pd_daterow.iloc[-1]['is_open']
        return is_open
    
    展开全文
  • java判断String字符串数组中是否存在某个值,有下面2种方法可以实现 1.可以使用Arrays类中binarySearch(Object[] a, Object key) 方法来查找是否存在某个值,如果某个值存在则返回值大于0,反之返回值则小于0 优点...

    java判断String字符串数组中是否存在某个值,有下面2种方法可以实现

    1.可以使用Arrays类中binarySearch(Object[] a, Object key) 方法来查找是否存在某个值,如果某个值存在则返回值大于0,反之返回值则小于0

    • 优点:使用二分查找法,效率快捷。
    • 缺点:查询的数组必须是有序的,如果不是有序的话,使用此方法是没有用的。
    String[] array = {"1","2","3","4"};
    int index = Arrays.binarySearch(array,"2");
    System.out.println("index:" + index); //--- index:1
    index = Arrays.binarySearch(array,"0");
    System.out.println("index:" + index); //--- index:-1
    index = Arrays.binarySearch(array,"5");
    System.out.println("index:" + index); //--- index:-5

    2.使用Arrays类中asList()方法将数组转化为List()列表,在使用contains()方法判断数组中是否存在某个值

    • 优点:数组可以是乱序的,没有顺序的要求。
    • 缺点:查询效率上可能稍慢,但应该不会影响大局。
    String[] array = {"1","2","3","4"};
    boolean flag = Arrays.asList(array).contains("2");
    System.out.println("flag:" + flag);//--- flag:true
    flag = Arrays.asList(array).contains("0");
    System.out.println("flag:" + flag);//--- flag:false
    flag = Arrays.asList(array).contains("5");
    System.out.println("flag:" + flag);//--- flag:false

    说的可能不够全面,欢迎补充^_^

    展开全文
  • Java中判断数组是否为空?

    万次阅读 2017-06-06 14:52:26
    1.判断一个String类型的字段是否为空 StringUtils.isBlank()可判断 null,"","",三种类型 2.判断两个字符串是不否相等的最好办法(可以防止出现为空现象) 不相等 !Objects.equals(WmCouponState.OPEN, coupon...
  • Python判断字符串是否包含子字符串

    万次阅读 2019-04-10 15:36:20
    Python如何判断一个字符串是否包含指定字符串?本文介绍Python判断一个字符串是否包含指定子串的4种方法。具有一定的借鉴价值。 第一种 使用in运算符 最简单的方法是通过python的 in 运算符 str = "Everyone has...
  • python判断对象是否为None

    万次阅读 2017-08-15 11:40:06
    代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是`if x is None`; 第二种是 `if not x:`; 第三种是`if not x is None`(这句这样理解更清晰`if not (x is None)`) 。 如果你觉得这样写没啥...
  • java判断字符串不为空和null的方法

    万次阅读 多人点赞 2018-03-22 14:32:37
    1、 空串”“是长度为0的字符串,它有自己的串长度(0)和内容(空),判断一个字符串为空的方法: if (str.length() == 0); 或 if (str.equals("")); 2、 null串表示目前没有任何对象与...
  • 判断闰年

    万次阅读 2019-06-14 00:43:32
    判断闰年 判断某年是否是闰年。公历纪年法中,能被 4 整除的大多是闰年,但能被 100 整除 而不能被 400 整除的年份不是闰年,如 1900 年是平年,2000 年是闰年。 输入数据 一行,仅含一个整数a(0 < a < 3000)...
  • mybatis判断非空

    万次阅读 2017-11-28 15:48:01
    <if test="type!=null and type!=''"> AND type = #{type} </if> 这里要强调下,test用双引号,字符串用单引号。反过来写虽然编译不会报错,但是在运行时会出现判断不了的问题。 ...
  • 今天来说一下如何判断字典中是否存在某个key,一般有两种通用做法,下面为大家来分别讲解一下: 第一种方法:使用自带函数实现。 在python的字典的属性方法里面有一个has_key()方法,这个方法使用起来非常简单。 例...
  • 1、String的非空判断。 StringUtils.isNotEmpty(String str); 2、Integer的非空判断。 null != Integer ; 3、list的大小判断。 list.size() == 0 4、对象的非空判断 null != object
  • 一、通过查询数组中的值来判断是否存在数组中 在PHP中,可以使用in_array()函数直接确定某元素是否在数组中。如果数组中存在该元素,则in_array()函数会返回true,否则返回false 语法 in_array(search,array,...
  • 空值判断:对整个Series/Dataframe判断+对单独值判断
  • 判断质数/素数——我知道的最快的方法

    万次阅读 多人点赞 2017-12-01 20:23:32
    标准版:大部分人都知道的比较快的方法:判断从2到sqrt(n)是否存在其约数,时间复杂度O(sqrt(n)) 高配版:判断2之后,就可以判断从3到sqrt(n)之间的奇数了,无需再判断之间的偶数,时间复杂度O(sqrt(n)/2) 尊享...
  • js判断对象为空以及有好几种方法了,但是个人觉得不是特别方便。 比如: 1、把对象通过 JSON.stringify 转为字符串,再判断字符串是否等于 " {} " 2、for in循环,判断key是否存在 3、jq的方法 es6已经帮我们很...
  • 素数判断

    千次阅读 2017-11-30 12:59:13
    在Raptor的某些问题中,会有判断素数或者找出某一区间范围内的素数,这样的问题比较多,因此本篇内容讲解怎么判断一个数是不是素数 定义:质数(prime number)又称素数,质数定义为在大于1的自然数中,除了1和它...
  • 判断素数

    千次阅读 2017-08-29 21:15:37
    7-1 判断素数(10 分) 本题的目标很简单,就是判断一个给定的正整数是否素数。 输入格式: 输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于2 ​31 ​​的需要判断的正整数。 输出格式: ...
  • python 判断数字是奇数还是偶数

    万次阅读 2019-04-23 11:10:55
    num=int(input('输入一个整数:')) #判断输入是否为整数 except ValueError: #不是纯数字需要重新输入 print("输入的不是整数!") continue if num%2==0: print('偶数') else: ...
  • 【Hive】空值判断与处理

    万次阅读 2019-12-16 22:35:37
    Hive空值判断与处理 Hive中空值判断基本分两种 (1)NULL 与\N Hive在底层数据中如何保存和标识NULL,是由 alter table name SET SERDEPROPERTIES('serialization.null.format' = '\N'); 参数控制的 比如: 1.设置 ...
  • 判断参数是否为空,是因为在controller层会写很多if else 这样代码很冗余,封装一种方法可以判断参数是否为空,判断集合,是否为0,因为现在业务使用需要判断类型不是很多,如果多种类型可以考虑新增方法去判断,...
  • <script type="text/javascript">... //判断是否为函数 try { if(typeof FunName === "function") { //是函数 其中 FunName 为函数名称 alert("is function"); } else { //不是函数 ...
  • java判断字符串是否包含某个字符(串)

    万次阅读 多人点赞 2018-07-28 18:38:18
    判断一个字符串是否包含某个子串的n种方法 startsWith() contains方法 indexOf方法 startsWith() 这个方法有两个变体并测试如果一个字符串开头的指定索引指定的前缀或在默认情况下从字符串开...
  • 从控制台输入年份,判断该年份是否为闰年,并输出判断结果。 实现思路: 可通过运算符实现闰年判断的条件: (1)能被4整除且不能被100整除的年份 实现:(年份 % 4 == 0)&&(年份 % 100 != 0) ...
  • 判断语句之:问号判断

    千次阅读 2018-07-17 09:41:16
    两个条件判断: enabled == '1' ? '是' : '否' 若enabled == '1'成立'是'为真 三个条件判断: enabled == '1' ? '已审核' : enabled == '0' ? '未审核 ' : '已锁定' 若enabled == '1'成立'已审核'为真,...
  • uniapp 判断平台

    千次阅读 2020-01-03 14:44:40
    运行期判断 运行期判断是指代码已经打入包中,仍然需要在运行期判断平台,此时可使用uni.getSystemInfoSync().platform判断客户端环境是 Android、iOS 还是小程序开发工具(在百度小程序开发工具、微信小程序开发...
  • 补码加减法判断进位判断是否溢出的总结

    万次阅读 多人点赞 2016-09-18 00:45:19
    通常我们说的加减法进位方式判断是否溢出一般指的都是补码方式运算下的。无论是以为符号位还是两位符号位,逻辑是相同的。先由一位符号位说起。 假设是5位机器位,一位用作符号位,四位用作数据位,那么数据的表示...
  • 判断一个数是不是质数(素数),3种方式介绍

    万次阅读 多人点赞 2018-06-10 09:56:59
     然后,我们只需要从2开始,一直到小于其自身,依次判断能否被n整除即可,能够整除则不是质数,否则是质数。   2.初步优化  假如n是合数,必然存在非1的两个约数p1和p2,其中p1(n),p2>=sqrt(n)。由此...
  • 判断是不是这种字符串: ‘压力大力压’ function palindrome(str) { let reg = /[\w\_]/g; let str0 = str.toLowerCase().replace(reg, ""); let str1 = str0.split("").reverse().join(""...
  • Python-判断列表(list)是否为空

    万次阅读 2019-05-08 12:05:56
    1.is not None 判断 列表不为空 list_1 = [] if list_1 is not None: print('list is not none') 列表为空 list_1 = [] if list_1[0] is None: print('list_1 is none') 2.if 列表判断 列表不为空(空列表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 874,214
精华内容 349,685
关键字:

判断