用简单循环解决的素数问题

Posted la-pu-ta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用简单循环解决的素数问题相关的知识,希望对你有一定的参考价值。

  • 素数探求

    试商法

    //用2~sqrt(x)之间的整数去试商
    int IsPrime(int x)
    {
        int i,squareroot;
        if(x==1) return 0;
        squareroot=(int)sqrt(x);
    	int i;
    	for(i=2;i<=squareroot;i++)
        {
            if(x%i==0) return 0;
        }
    	return 1;
    }
    
  • 判断完数

    试商法

    int IsPnumber(int x)
    {
        int i,sum=0;
        for(i=1;i<=(x/2);i++)
        {
    		if(x&i==0) sum+=i;
        }
        return x==sum?1:0;
    }
    //优化速度
    int IsPnumber(int x)
    {
        int i,sum=0;
        int k=(int)sqrt(x);
        for(i=1;i<=k;i++)
        {
    		if(x&i==0)
            {
    			sum=sum+i+x/i;
            }
        }
        return x==sum?1:0;
    }
    
  • 验证歌德巴赫猜想

    任何一个大于等于6的偶数总能表示为两个素数之和

    试商法

    函数不能嵌套定义,但可以嵌套调用

    引用标志变量flag 标记解是否找到的状态 一般情况下flag为0或1 flag注意要进行初始化

  • 回文素数

    1. 从10试到n-1
    2. 分离个位,十位,百位
    3. 若(t==m)&& IsPrime(m)则为回文素数
    4. 2位与3位运算不同
  • 孪生素数 相差为2的两个素数

    1. IsPrime(i) && IsPrime(i+2)

      加速:若min为偶数,则min++,宁且i+=2;(测试所有奇数)

    2. 使用front记录前一个素数

  • 梅森素数

    注意:pow()函数返回值为double,且调用较慢

    最好自己写一个乘方函数

以上是关于用简单循环解决的素数问题的主要内容,如果未能解决你的问题,请参考以下文章

判断素数C语言案例-循环

[LeetCode]Count Primes

用C++编写程序求100以内的所有素数(质素)的和。

非常简单的素数测试 - 我想我不理解for循环

c语言:遍历水仙花数n,判断是不是为素数,并返回结果。

数论证明(任何一个素数倒数的循环小数位数一定小于素数本身)