• 哈希和素数打表


    输入一个数判断数组中是否存在这个数

    输入一个数判断数组中是否存在这个数

    举例子吧
    一个数组a[7]={1,5,7,2,13,9,8}
    然后再定义一个a数组中最大元素+1的数组b[14]={0};
    for(i=0;i<7;i++)
    b[a[i]]=1;
    如果输了一个数w,则需要判断b[w]是不是为1,如果是1,a数组里有这个数

    输入一个数判断数组中是否存在这个数并输出这个数在数组中的下标

    举例子吧
    一个数组a[7]={1,5,7,2,13,9,8}
    然后再定义一个a数组中最大元素+1的数组b[14];
    for(i=0;i<14;i++)
    b[i]=-1;//将b数组都初始化为-1
    for(i=0;i<7;i++)
    b[a[i]]=i;
    如果输了一个数w,则需要判断b[w]是不是-1,如果是-1,a数组里没有这个数
    如果b[w]不是-1,a数组里就有这个数w,b[w]就是这个数w在a数组中的下标

    素数打表

    素数打表,思路就是下面这个图
    素数打表
    先从2开始(1不是素数忽略)
    把2标记为素数,然后把2的倍数都标记为非素数
    然后读2下一个素数3,把3标为素数,把3的倍数标为非素数
    读到4,非素数,不处理,再读5
    把5标记为素数,把5的倍数标记为非素数
    读6,非素数,读7,素数,把7的倍数标记为非素数
    (这时候已经把2,3,5,7的倍数标记为非素数了,标记了一大半了)
    以此类推
    下面上代码:

    #include <stdio.h>
    #define N 1000000
    int main()
    {
        long long int a[N]= {0},x,y,i,j,k;//数组a初始化为0
        for(i=2; i<N; i++)
            if(!a[i])//a[i]==0就说明i是素数
                for(j=i*i; j<N; j+=i)
                    a[j]=1;//将i的倍数标记为1;
        for(i=2; i<N; i++)
            if(a[i]==0)
               printf("%lld
    ",i);//输出素数
        return 0;
    }

    还有一种:

    #include <stdio.h>
    #define N 1000000
    int main()
    {
        long long int a[N]= {0},x,y,i,j,k;//数组a初始化为0
        for(i=2; i<N; i++)
            if(!a[i])//a[i]==0就说明i是素数
                for(j=i+i; j<N; j+=i)
                    a[j]=1;//将i的倍数标记为1;
        for(i=2; i<N; i++)
            if(a[i]==0)
               printf("%lld
    ",i);//输出素数
        return 0;
    }

    上面两个代码的区别:

    for(j=i*i; j<N; j+=i)
    	a[j]=1;//将i的倍数标记为1;
    /**********************/
    for(j=i+i; j<N; j+=i)
    	a[j]=1;//将i的倍数标记为1;

    第二个代码,i+i会出现这种问题:
    比如6,10
    6在读2的时候标记了非素数
    6又在读3的时候标记了非素数
    重复标记了两次
    同样10也被重复标记了两次,分别是2和5的时候
    而第一个代码,i*i就不会出现这种情况

  • 相关阅读:
    Bootstrap使用
    Gulp
    Less和Sass
    ECMAScript6语法重点(二)
    deepin scrot-- linux下的截图工具
    iframe获取父、子窗口的方法
    测试总结--同步或异步处理过程中常见的问题
    测试总结--兼容性
    测试总结--时间/金额类字段需要关注的点
    测试总结--系统调用链路发生变更,如何评估测试范围
  • 原文地址:https://www.cnblogs.com/yanhua-tj/p/13996589.html
Copyright © 2020-2023  润新知