赞
踩
- #include<stdio.h>
- #include<time.h>
- bool IsPrime(int n)
- {
- int i;
- if (n <= 1)
- {
- return false;
- }
- if (n == 2)
- {
- return true;
- }
- for (i = 2; i < n; i++)
- {
- if (n % i == 0) return false;
- }
- return true;
- }
- int main()
- {
- int n, i;
- int t1 = clock();
- for (i = 0; i <= 1000; i++)
- {
- if (IsPrime(i)) printf(" %d ", i);
- }
- int t2 = clock();
- printf("\n运行时间:%d\n", t2 - t1);
- return 0;
- }
代码运行结果如下:
代码示例如下:
- #include <stdio.h>
- int main()
- {
- int x = 0;
- int i = 0;
- unsigned int count = 0;
- x = 2;
- printf("%d ", x);
- for (x = 3; x < 1000; x += 2)
- {
- for (i = 2; i < x; i++)
- {
- count++;
- if (x % i == 0)
- {
- break;
- }
- }
- if (x == i)
- {
- printf("%d ", x);
- }
- }
- printf("\n\n\n");
- printf("运算的次数:%d ", count);
- return 0;
- }
运行结果如下:
代码示例如下:
- #include <stdio.h>
- int main()
- {
- int x = 0;
- int i = 0;
- unsigned int count = 0;
- x = 2;
- printf("%d ", x);
- for (x = 3; x < 1000; x += 2) //两层for循环均只产生奇数
- {
- for (i = 3; i < x; i += 2) //控制第二层for循环不再自增1,而是从3开始自增2
- {
- count++;
- if (x % i == 0)
- {
- break;
- }
- }
- if (x == i)
- {
- printf("%d ", x);
- }
- }
- printf("\n\n\n");
- printf("运算的次数:%d ", count);
- return 0;
- }
代码运行结果如下:
代码示例如下:
- #include<stdio.h>
- #include<time.h>
- #include<math.h>
- int IsPrime(int n)
- {
- int i;
- if (n % 2 == 0) return 0;
- for (i = 3; i <= sqrt(n); i += 2)
- {
- if (n % i == 0) return 0;
- }
- return 1;
- }
- int main() {
- int n, i;
- int t1 = clock();
- printf(" 2 ");
- for (i = 3; i <= 1000; i++)
- {
- if (IsPrime(i)) printf(" %d ", i);
- }
- int t2 = clock();
- printf("\n运行时间:%d\n", t2 - t1);
- }
代码运行结果如下:
代码示例如下:
- #include <stdio.h>
- int main()
- {
- int arr[500] = { 0 };
- int x = 0;
- int i = 0;
- unsigned int count = 0;
- int sum = 0; //定义数组的下标
- arr[sum] = 2; //把2存到数组中
- sum++;
- arr[sum] = 3; //把3存到数组中
- sum++;
- for (x = 5; x < 1000; x += 2)
- {
- for (i = 0; i < sum; i++)//从下标0开始遍历,直到数组的最后一个质数
- {
- count++;
- if (x % arr[i] == 0)
- {
- break;
- }
- }
- if (sum == i) //遍历后都不能整除
- {
- arr[sum] = x; //把质数保存到数组中
- sum++; //下标加1,为下次放做准备
- }
- }
- for (i = 0; i < sum; i++)//使用for循环进行输出
- {
- printf("%d ", arr[i]);
- }
- printf("\n\n\n");
- printf("运算的次数:%d ", count);
- return 0;
- }
代码运行结果如下:
思路:把2到n中的所有数都列出来,然后从2开始,先筛去n内所有2的倍数,然后每次从下一个剩下的数(必然为质数)开始,筛去其n内所有的倍数,最后剩下的数都是质数
代码示例如下:
-
- //1.设置一个数组a[],a[i]的值为1表示i为质数,将所有元素初始化为1
-
- //2.筛去m的倍数,即把a[2*m]、a[3*m]…置为0
-
- //3.输出a[i]值为1的i。
- #include<stdio.h>
- #define MAX 1000
- int s;
- int a[MAX];
- void prime()
- {
- s = 1;
- for (int i = 0; i <= MAX; i++)
- a[i] = 1;
- a[0] = a[1] = 0;
- for (int i = 2; i <= MAX; i++)
- {
- if (a[i])
- a[s++] = i;
- for (int j = i * 2; j <= MAX; j += i)
- a[j] = 0;
- }
- }
- int main()
- {
- prime();
- for (int i = 1; i < s; i++)
- printf("%d ", a[i]);
- return 0;
- }
代码运行结果如下:
编者注:以上对本小题的代码编写的多种方法,欢迎大家收藏借鉴并转发;
以上代码仅供参考,如有问题欢迎大家在留言区批评指正;
版权所有,翻印必究,如有雷同纯属巧合,转载请注明出处。
By CRH380AJ2808 2022.04.27
————————————————
版权声明:本文为CSDN博主「CRH380AJ2808」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JH13thpig/article/details/124440215
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。