标题:无法理解:求出1到某个数之间的素数
只看楼主
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
以下是引用return_0在2020-4-7 10:45:24的发言:

???

发帖人把main里面的val 和 isprime的参数val 弄混了 以为是一个变量
5楼的wmf2014的回复中也提到这一点
我建议他把isprime的参数改成 value
这样就不会混淆main里面的val
理解起来方便点

https://zh.
2020-04-07 11:00
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
我觉得解疑答惑要切题意才算合格,就事论事嘛。
既然有人质疑我没改进,那我就给出两个改进的素数判断函数共楼主参考吧:
1,行数较少
int isprime(int n)
{
    int i;
    if(n<2)return 0;    //负数和0,1都不算质数
    for(i=2;i*i<=n&&n%i;i++);
    return i*i>n;
}
2,算术方式中判断效率较高(待检验,只是根据大于5的质数在6n两边写的)
int isprime(int n)
{
    int i;
    if(n==2||n==3||n==5)return 1;
    if(n<6)return 0;
    i=n%6;
    if(i>1&&i<5)return 0;
    for(i=7;i*i<=n&&n%i;i+=6);
    return i*i>n;
}

[此贴子已经被作者于2020-4-7 11:36编辑过]


能编个毛线衣吗?
2020-04-07 11:31
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
以下是引用wmf2014在2020-4-7 11:31:03的发言:

我觉得解疑答惑要切题意才算合格,就事论事嘛。
既然有人质疑我没改进,那我就给出两个改进的素数判断函数共楼主参考吧:
1,行数较少
int isprime(int n)
{
    int i;
    if(n<2)return 0;    //负数和0,1都不算质数
    for(i=2;i*i<=n;i++);
    return i*i>n;
}
2,算术方式中判断效率较高(待检验,只是根据大于5的质数在6n两边写的)
int isprime(int n)
{
    int i;
    if(n==2||n==3||n==5)return 1;
    if(n<6)return 0;
    i=n%6;
    if(i>1&&i<5)return 0;
    for(i=7;i*i<=n;i+=6);
    return i*i>n;
}

都漏了整除校验
循环必然跑完

哦好吧 改正了
当我没说

[此贴子已经被作者于2020-4-7 11:40编辑过]


https://zh.
2020-04-07 11:36
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
回复 13楼 lin5161678
已改

能编个毛线衣吗?
2020-04-07 11:38
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
回复 12楼 wmf2014
for(i=7;i*i<=n&&n%i;i+=6);
从7开始 不停+6
6n+1 有体现了
6n-1 没找到你是怎么校验的


懂了
前面的整除判定余数是不是 大于1小于5
检查n是否符合形式 6n+1 6n-1
后面的循环只是判断两种形式都统一检查

[此贴子已经被作者于2020-4-7 11:46编辑过]


https://zh.
2020-04-07 11:41
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
回复 15楼 lin5161678
还是有bug的,你的疑问存在,不愿改了。

能编个毛线衣吗?
2020-04-07 12:07
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
还是对2改下吧(已验证):
int isprime(int n)
{
    int i, j = 4;
    if (n == 2 || n == 3 || n == 5)return 1;
    if (n < 6)return 0;
    i = n % 6;
    if (!i||(i > 1 && i < 5))return 0;
    for (i = 5; i*i <= n&& (n%i); i += j)
    {
        if (j == 4)j = 2;
        else j = 4;
    }
    return i * i > n;
}

[此贴子已经被作者于2020-4-7 13:12编辑过]


能编个毛线衣吗?
2020-04-07 12:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500892-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.389892 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved