C语言求素数/质数最高效的方法
2016-11-15 19:13
330 查看
//
使用筛选法
#include <stdio.h>
#include <math.h>
int main(){
int count = 0;
int arr[101];//
定义一个数组将0-100之间的数依次作为数组元素存入数组中
for (int i = 0; i <= 100; i++)
{
arr[i] = i;
arr[1] = 0;// 1不是素数,将其挖掉
}
for (int i = 2; i <= sqrt(100);
i++) {//
将所有的非素数挖掉
for (int j = i + 1; j <= 100; j++)
{
if (arr[i] != 0 && arr[j]
!= 0) {
if (arr[j] % arr[i]
== 0) {
arr[j] = 0;
}
}
}
}
for (int i = 0; i <= 100; i++)
{// 将非0的数组元素遍历,即为1-100之间全部的素数
if (arr[i] != 0)
{
count++;
printf("%d\t",arr[i]);
}
}
printf("\n1-100之间素数的个数是%d\n",count);
return 0;
}
说明:
1).全部循环次数74次,所有求素数方法中循环次数最少.
2).关于只要求到平方根的说明:因为任何一个数都不可能分解成两个大于其平方根的数的乘积.肯定只能分解为一个大于或等于其平方根,另一个小于或等于其平方根.
结果如下:
使用筛选法
#include <stdio.h>
#include <math.h>
int main(){
int count = 0;
int arr[101];//
定义一个数组将0-100之间的数依次作为数组元素存入数组中
for (int i = 0; i <= 100; i++)
{
arr[i] = i;
arr[1] = 0;// 1不是素数,将其挖掉
}
for (int i = 2; i <= sqrt(100);
i++) {//
将所有的非素数挖掉
for (int j = i + 1; j <= 100; j++)
{
if (arr[i] != 0 && arr[j]
!= 0) {
if (arr[j] % arr[i]
== 0) {
arr[j] = 0;
}
}
}
}
for (int i = 0; i <= 100; i++)
{// 将非0的数组元素遍历,即为1-100之间全部的素数
if (arr[i] != 0)
{
count++;
printf("%d\t",arr[i]);
}
}
printf("\n1-100之间素数的个数是%d\n",count);
return 0;
}
说明:
1).全部循环次数74次,所有求素数方法中循环次数最少.2).关于只要求到平方根的说明:因为任何一个数都不可能分解成两个大于其平方根的数的乘积.肯定只能分解为一个大于或等于其平方根,另一个小于或等于其平方根.
结果如下:
相关文章推荐
- 详细注释如何用C语言生成回文数的方法高效判断回文质数
- C语言实现打印1000以内素数的三种基本方法
- 高效判断素数方法
- C语言中怎么判断一个数是否是素数(即质数)
- C语言之判断100~200之间的素数(质数)
- 一道素数打表的水题,顺便记下打表高效方法
- 求素数的几种高效方法
- 求素数的几种高效方法
- c语言:实现对于给定的正整数N,依次打印出小于等于N的所有素数。两种方法及其优化
- 判断一个数是否为质数/素数——从普通判断算法到高效判断算法思路
- Python判断质数(素数)的方法讲解
- C语言高效编程的四大秘技之数学方法解决问题
- C语言求解素数(质数)的优化:打印100-200之间的素数
- 判断质数(素数)的方法
- C语言求解素数(质数)的优化:打印100-200之间的素数
- 求质数(Prime Number 素数)的方法——厄拉多塞筛法
- Python用无限制数组实现求素数,不限制质数的个数,用筛选的方法!
- 求一千万以内的素数的比较高效的方法,
- 打素数表高效方法(线性)
- 高效判断素数方法