您的位置:首页 > 其它

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

2020-02-03 02:50 190 查看
  • 素数探求

    试商法

    //用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注意要进行初始化

  • 回文素数

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

      IsPrime(i) && IsPrime(i+2)

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

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

  • 梅森素数

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

    最好自己写一个乘方函数

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Diffident Ares 发布了15 篇原创文章 · 获赞 0 · 访问量 256 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: