你能帮我写一个筛选素数的 C 程序吗? 200

发布于 科技 2024-06-15
14个回答
  1. 匿名用户2024-01-29

    虽然你说不要考虑时间和精力等,但我还是和蔼地说,我觉得这个程序最好是用PHP写的。 我曾经用PHP编写过一个程序来确定质数,由于它是在服务器上执行的,因此它比我在计算机上使用VB要快很多倍。

    我不明白c,这是我从大师的空间里复制的。

    int map[n + 1] = ;

    for (i = 2; i < n; i++)if (map[ i ] == 0)

    for (j = i * 2; j < n; j += i)map[ i ] = 1;

    printf("%d 是质数", i);

    以下是他的工作方式:

    首先找到一张纸,写下从2-n开始的所有数字,从头开始,如果数字没有被划掉,则划掉它的所有除数,现在假设n=15在列中。

    如果 2 没有从一开始就被划掉,它的所有倍数都会被划掉,这样就剩下序列了。

    2 的筛选结束了,当我开始看到仍然存在的第二个数字是 3 时,我划掉了所有 3 的倍数,剩下的数字列为:

    然后继续到最后,你会发现剩下的数字最后都是素数。

  2. 匿名用户2024-01-28

    我不会写程序。 一个不考虑时间复杂性的程序。 尤其是这种大数字。 这没什么意思...... 如果你没有程序基础。 你可能不明白我在说什么。

    首先,如何判断一个大数是否是质数? 直接判断没有通用的公式。 而且它只能从2-n使用。

    一个接一个地判断...... 这是为了准确确定一个数字是否是质数。 但是当它是一个大问题时。

    光是判断一个数字就需要很多循环,而且区间里有很多数字。 那么这种方法肯定不够有效。

    六楼的报价方法。 有一个缺点。 该算法仅适用于判断小数间隔。 它不能是对大数字的判断。 因为大数的数组。 它很大。 空间的复杂性太大了。

    那么如何改进这种方法呢? 从而提高效率。

    我的想法是分级过滤。 最后,使用第一步中的算法来测试无法过滤的数字。

    假设区间 [a,b] 是我们的大数区间...... 总共有 n 个数字。

    循环。 n 次。 过滤掉偶数,因为它们可以被 2 整除。 也就是说,还剩下 n 个 2。

    循环,步长为 2,剩余的 n 个 2 个数字逐个除以 3看看是不是可整除的,过滤掉可整除的3。。

    循环,以步骤为单位? ,剩余的数字。 除以 5... 过滤器 5.

    最后一步。 使用最开始的方法。 经过测试和过滤后无法判断的数字... 还是找不到可整除数。。那是最主要的......

    该算法的一般流程如下。 因为有最终过滤标准方法的最后一步。 所以。 100%准确筛选... 如果房东还是不太了解。。你能给我留言吗...

  3. 匿名用户2024-01-27

    以下过程可以过滤掉 [a,b] 区间内的所有素数。

    #include

    #include

    int isss( int num)

    int i;

    for(i=2;i<=sqrt(num);i++)if(num%i==0)return 0;

    return 1;

    void main()

    int a,b;A 和 B 是区间的左右两侧。

    int i,count=0;count 用于计算素数的数量。

    printf("请输入该部分的左侧和右侧");

    scanf("%d%d",&a,&b);

    if(a>=b) 区间的右侧必须大于左侧。

    printf("输入有误! ");

    return;

    for(i=a;i<=b;i++)

    if(isss(i))

    count++;

    printf("%d ",i);

    if(!count)

    printf("这个区间内没有质数! ");

  4. 匿名用户2024-01-26

    以下是这个节目的**,希望看完后能记住。

    #include

    #include

    void main()

    int k,i,p,q,m,n=0;

    printf("请给出下限 p 和上限 q:");

    scanf("%d,%d",&p,&q);

    for(m=p+1;m<=q;m=m+2)k=sqrt(m);

    for(i=2;i<=k;i++)

    if(m%i==0)

    break;

    if(i>=k+1)

    printf("%3d",m);

  5. 匿名用户2024-01-25

    #include

    void main()

    int i,j;

    printf("1 n 以内的质数:");

    for(i=1;i<=n;i++)

    for(j=2;j<=i/2;j++)

    if(i%j==0)

    break;

    if(j>i/2)

    printf("%d\t",i);

    ps:运行时给 n 分配一个明文值!!

  6. 匿名用户2024-01-24

    好吧,我给你一些提示,这些大素数,用随机算法,你可以自己搜索拉宾-米勒素数算法,在“算法导论”的理由中,如果你想找**,网上有很多,你自己找。 给你这个关键词就足够了。

  7. 匿名用户2024-01-23

    对那位邢同学来说,如果 p 是奇数,你的程序就没有挂了!

  8. 匿名用户2024-01-22

    1. 编写我们的头文件和 main 函数。 写下我们的开始。

    2. 编写一个定义变量,并用我们的语言定义一个 i,用于以下 for 循环。

    3. 让我们输入一个数字,在此之前,我们需要有一个 printf() 提示。

    4. 使用 for 循环查看是否可以从 2 到 n-1 被 n 整除,如果空腔粗糙,则断开。

    5.判断素数,如果程序正常结束,i = n,表示他是素数。

    6.如果它以休息结束,他会<>

    7. 输出最终结果。 早大便。

  9. 匿名用户2024-01-21

    我们先解释一下筛选方法的步骤: <1>先挖出1(因为1不是素数)。 <2> 用 2 去掉后面的数字,挖出能被 2 整除的数字,即挖出 2 的倍数。

    3>用3去掉后面的数字,挖出3的倍数。 <4>使用....这些数字用作除数,以从这些数字中删除数字。 上述操作需要一个大容器来加载所有数字的集合,只要满足上述条件,即全部到 2 的 n 次方到 0,3 到 n 次方为 0,4 到 n 次方为 0。

    直到这个数据集的末尾,使不为0的数字是质数,然后按标记找到它,在过滤过程中的步骤如下 如果你觉得这个方法不好理解,你可以用他们上面写的常规算法,但是如果数字太大, 计算速度非常慢。

  10. 匿名用户2024-01-20

    首先标记 2 的倍数,然后标记 3 的倍数。 之后,依次标记数组中未标记数字的倍数,直到遍历整个数组,然后完成。 数组中未标记的是质数。 这里的乘数是从 2 开始的整数倍数!

    #include ""

    #include

    using namespace std;

    #define n 1001

    void main(void)

  11. 匿名用户2024-01-19

    1. 编写我们的头文件和 main 函数。 写下我们的开始。

    2. 编写一个定义变量,并用我们的语言定义一个 i 以用于后续的 for 循环。

    3. 输入一个数字,在此之前,我们需要有一个 printf() 提示,它使程序看起来是有条件的。

    4. 使用 for 循环查看它是否能被 n 从 2 整除到 n-1,如果可以,则中断。

    5.判断素数,如果程序正常结束,i = n,表示他是素数。

  12. 匿名用户2024-01-18

    筛选法的定律:(以1 1000中的素数为例)我们知道素数的定义:它是一个素数,只能被1和它本身整除,所以如果你这样看,只要有一个既不是1也不是数字本身并除以这个数字的数, 可以说,这个数字不是质数。

    例如,5 是素数,因为 5 只能被 5 和 1 整除,而 6 不是素数,因为 6 除了能被 1 和 6 整除外,还可以被 2 和 3 整除。 试想一下,我们要判断6是不是质数,我们是否需要循环到6来判断它,不,因为2和3是他的因数,当我们循环到2时,我们发现2的所有倍数,比如4、6、8、10、12等,这些数字至少有2个这个因数, 因此,我们可以判断它们不是素数。而且由于 4 是 2 的倍数,所以当循环达到 2 时,已经确定 4 不是质数,所以我们不需要挖出 4 的倍数,只需跳过 4,来到 5,挖出 5 的所有倍数,然后 6、6 以 2 的倍数挖出来, 所以跳过 6 并来到 7....

    循环到最后一个数字,也就是上面7个步骤所说的,剩下的没挖出来的数字(挖出来的意思就是把这个数字设置为0),也就是不是0的数字就是质数。

    我不知道你是否能理解我在说什么。 希望对你有所帮助。

    #include

    int main()

    for(i=1;i<1000;i++)

    if(prime[i]!=0)

    printf("%d ",prime[i]);最后一个非 0 数字输出返回 0; }

  13. 匿名用户2024-01-17

    质数。 大于 1 的自然数不能被除 1 和 100 整数本身之外的任何其他自然数整除的次数。 素数在数论中起着重要作用。

    大于 1 但没有素数通道的数字称为合数。 1 和 0 既不是素数也不是复合数。

    通过滤波得到的100以内的素数来源如下:

    include"stdio.h"

    main()

    main()

    inti,j。

    对于 (i = 2; 我< 99 岁; I++

    对于 (j = 2; I++j +

    if(i%j==0)

    破; 如果 (j i 1)。

    printf(“%4d”,i);

  14. 匿名用户2024-01-16

    总结。 您好,亲爱的,使用过滤方法查找 100 以内的质数。

    筛选方法介绍。

    首先,将 n 个自然数按顺序排列。 1 不是质数,也不是合数,划掉。 第二个数字 2 作为质数保留,2 之后所有能被 2 整除的数字都被划掉。 2.后面的第一个不是。

    划掉的数字是 3,留下 3,然后划掉 3 后面所有能被 3 整除的数字。 3 后第一个未交叉的数字是 5,留下 5,然后划掉 5 后所有可被 5 整除的数字。 如果继续这样做,您将过滤掉所有不超过 n 的合数,留下所有不超过 n 的质数。

    这实际上是一个非常粗糙的解决方案,将质数一一除以!

    程序流程。 * 将 n 个自然数写入数组,1 划掉(设置为 0)。

    所有在 2 后可被 2 整除的数字都被划掉(设置为 0)。

    设 2 之后的第一个非零数是设置为 n 的第二个质数,并划掉 n 之后所有可被 n 整除的数字。

    等等。 在 C 语言中,使用过滤器方法查找 100 以内的素数? 我以各种方式要求它,请附上流程图,谢谢。

    这个问题由我来决定,打字需要一点时间,所以请耐心等待。

    您好,亲爱的,使用筛选方法查找 100 以内的素数 筛选方法介绍 首先按顺序排列 n 个自然数。 1 不是质数,也不是合数,划掉。 第二个数字 2 作为质数保留,2 之后所有能被 2 整除的数字都被划掉。

    2 之后未划掉的第一个数字是 3,留下 3,然后划掉 3 后所有可被 3 整除的数字。 3 后第一个未交叉的数字是 5,留下 5,然后划掉 5 后所有可被 5 整除的数字。 如果继续这样做,您将过滤掉所有不超过 n 的合数,留下所有不超过 n 的质数。

    这实际上是一个非常粗糙的解决方案,将质数一一除以! 程序流程*将n个自然数写入数组,划掉(设置为0)*所有在1之后可以被2整除的数字,划掉(设置为0)*让2之后的第一个非0数字成为设置为n的第二个质数,划掉所有在n之后可以被n整除的数字,划掉*,依此类推。

相关回答
11个回答2024-06-15

这是一个 C 程序。 如果你想要一个C++程序,我可以改变它。 #include >>>More

8个回答2024-06-15

如果只有一个搜索条件,则按产品名称。

字段为 txtname,表名为 tablename,框名为 txtname。 >>>More

13个回答2024-06-15

1. H 未初始化。

2.J应增加cout<3.if(h=2)应在内循环结束后; >>>More

22个回答2024-06-15

让我举个小例子。

主程序<字体> >>>More

4个回答2024-06-15

这是我的书名:

问题:输入 2 个整数,计算并输出它们的总和、差值、乘积和商。 要求程序输入不同的数据并运行两次。 >>>More