C++太极门小弟子 发表于 2021-6-8 21:40:20

S1E15用sqrt()求素数

#include <stdio.h>
#include <math.h>

int main() {
        int i, j;
        int flag;
        int num = 1;
        for (i = 2; i < 10000; i++) {
                flag = 0;
                for (j = 2; j < sqrt(i); j++) {
                        if (i % j == 0) {
                                flag = 1;
                                break;
                        }

                }
                if (!flag) {
                        num++;
                }
        }
        printf("%d",num);
        return 0;
}
与正确结果差了几个值,不知道哪里不对{:10_262:}

肖-肖 发表于 2021-6-8 21:43:34

本帖最后由 肖-肖 于 2021-6-8 21:45 编辑

第10行中for循环的条件改为:j <= sqrt(i)试一试吧

比如你要判断5是不是素数

总不能连2都不除吧~

C++太极门小弟子 发表于 2021-6-8 22:14:29

肖-肖 发表于 2021-6-8 21:43
第10行中for循环的条件改为:j

可是sqrt()返回的不是double类型,那2<√5肯定会除的啊

肖-肖 发表于 2021-6-8 22:37:09

本帖最后由 肖-肖 于 2021-6-8 22:38 编辑

C++太极门小弟子 发表于 2021-6-8 22:14
可是sqrt()返回的不是double类型,那2

举错例子了,比如是9
那么3就不会除了吧
因为3<3-->false
我电脑没电了~~关机了马上

C++太极门小弟子 发表于 2021-6-8 22:43:02

肖-肖 发表于 2021-6-8 22:37
举错例子了,比如是9
那么3就不会除了吧
因为3false


{:10_275:}好了

肖-肖 发表于 2021-6-9 10:33:52

C++太极门小弟子 发表于 2021-6-8 22:43
好了

嗯 如果解决了的话 给个最佳答案吧 ~

氢锂钠钾铷铯钫 发表于 2021-8-26 16:52:11

因为2和3的算术平方根比2本身都小,
所以无法用"被2到自己的算术平方根之间的一切整数除"来判定
但是2和3是质数,故需要在计算前预先算上,即总个数初始值定为2,然后操作数从4开始算
页: [1]
查看完整版本: S1E15用sqrt()求素数