判断一个数是否为素数

算法思想

设一个正整数x,sqrt(x)为x开平方后的值,若x不为素数,则x=a*b,a,b为2~x-1之间的整数,且当2=< a <= sqrt(x)时,必有sqrt(x)=< b <= x-1,即a和b必有一个数在2~sqrt(x)范围内,反推之,若x不可被2~sqrt(x)范围内的任何整数整除,则x必为素数。

代码实现

#include

#include

int main()

{

int x;

scanf("%d", &x);

printf("%d是否为素数: %d", x, IsPrime(x));

return 0;

}

int IsPrime(int x)

{

int i, squareRoot;

//小于或等于1的整数均不为素数,预先排除

if(x <= 1) return 0;

//sqrt(x)为开平方函数,其返回结果为浮点数,通过类型强转获得小于该浮点数的最大整数

squareRoot = (int)sqrt(x);

for(int i = 2;i <= squareRoot;i++)

{

//通过取余函数,若除得余数为0,说明x可被i整除,x不为素数

if(x%i == 0) return 0;

}

return 1;

}

求100以内的所有素数

算法思想

若一个正整数x不为素数,则它必定可以由两个或两个以上的素数的乘积表示,并且这几个素数中必定有一个素数小于或等于sqrt(x),即x必定可以被2~sqrt(x)中的一个素数整除。设一个数组int a[101];,使a[2]=2,a[3]=3,.....,a[100]=100,排除此数组中所有可以被2~sqrt(100)中的素数整除的数(素数本身除外),则剩下的元素数则均为素数。那么如何求2~sqrt(100)中的素数呢,很简单,不用求,首先从最小的素数2开始,将3~100中可以被2整除的数组元素置为0,然后往下循环,下一个不为0的数组元素必定为素数,一直循环至下一个不为0的数组元素大于sqrt(100)时,数组中可以被2~sqrt(100)中的素数整除的数均被置为0了,则数组中剩下不为0的数均为素数

代码实现

#include

#include

#define N 100

int main()

{

int a[N+1];

SiftPrime(a, N);

PrintPrime(a, N);

return 0;

}

void SiftPrime(int a[], int n)

{

//初始化数组元素

for(int i = 2;i <= n;i++)

{

a[i]=i;

}

for(int i = 2;i <= sqrt(n);i++)

{

//当a[i]不为0时,必定为素数

if(a[i] != 0)

{

//将a[i]之后所有不为0的数除以a[i]求余,若可整除,则不为素数,置为0

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

{

if(a[j] != 0 && a[j]%a[i] == 0)

a[j] = 0;

}

}

}

}

void PrintPrime(int a[], int n)

{

for(int i = 2;i < n;i++)

{

if(a[i] != 0)

printf("%d\t", a[i]);

}

}

c语言 sqrt求100以内素数,C语言实现判断一个数是否为素数并求100以内的所有素数...相关推荐

  1. C语言试题六十九之请编写函数判断一个数是不是素数

    1. 题目 编写函数:判断一个数是不是素数 素数:素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. 2 .温馨提示 ...

  2. php判断一个数是不是素数,php用函数判断一个数是否素数

    质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数. 首先知道什么是素数,一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数的条件,来进行判断个数是否素数 ...

  3. c语言sqrt是int行吗,c语言 e=(int)sqrt(n)报错了,这句有什么问题?

    满意答案 e=(int)sqrt(n);之所以出错,是因为你用的编译器所支持的sqrt函数有三种重载类型,分别如下: sqrt(double), sqrt(long double), sqrt(flo ...

  4. 同构数怎么判断_编程:输入1-100以内的一个整数,判断这个数是否是同构数。输出不同的情况...

    [判断题]中性点直接接地系统发生接地故障时,在三相中将产生大小相等,相位相差120度的零序电压与零序电流.( ) [填空题]零序电流速断保护与反应相间短路的电流速断保护比较,其保护区________, ...

  5. java求1000以内的回文素数_C语言求回文素数

    任意的整数,当从左向右读与从右向左读是相同的,且为素数时,称为回文素数.求 1000 以内的所有回文素数. 算法思想 实例的重点是判断一个数是否是回文素数.要输出 1000 以内的所有回文素数,首先应 ...

  6. C++ 判断一个数是不是素数

    题目:判断一个数是不是素数,1 < N <= 50000 思路:判断n是否整除(求余是否等于0)大于1而小于sqrt(n)中的任何一个数,如果有则不是素数,否则是素数 实现代码: // 判 ...

  7. 如何判断一个数是否为超级素数

    超级素数是指一个素数去掉其中一位或多位后,仍然是素数的数字.判断一个数是否为超级素数的方法可以通过迭代地去掉一位或多位,然后判断剩下的数字是否为素数.这个过程可以用while循环和range函数来实现 ...

  8. c语言一个数等于素数的乘积,C语言实现判断一个数是否为素数并求100以内的所有素数...

    判断一个数是否为素数 算法思想 设一个正整数x,sqrt(x)为x开平方后的值,若x不为素数,则x=a*b,a,b为2~x-1之间的整数,且当2=< a <= sqrt(x)时,必有sqr ...

  9. java语言 判断素数,C语言实现判断一个数是否为素数并求100以内的所有素数

    判断一个数是否为素数 算法思想 设一个正整数x,sqrt(x)为x开平方后的值,若x不为素数,则x=a*b,a,b为2~x-1之间的整数,且当2=< a <= sqrt(x)时,必有sqr ...

最新文章

  1. 2019年上半年收集到的人工智能图神经网络干货文章
  2. Redhat7.2上编译Linux内核源码
  3. java jediscluster_方便jediscluster操作的工具类
  4. redis学习(一)
  5. C++求任意多项式的所有可能的近似根durand kerner roots(附完整源码)
  6. IT基础结构-1.DC-DNS-安装
  7. python 导出大量数据到excel_怎么在python中将大量数据导出到Excel文件
  8. java date linux,Java中Date,SimpleDateFormat
  9. Node的异步与java的异步_node.js和异步编程回文
  10. 神秘的数组初始化_I / O神秘化
  11. mongo:(3)windows上mongoDB安装
  12. .Net中的多态知识点
  13. 学web前端有什么计划?
  14. 程序员“放弃” Python!?发生了啥?
  15. win7向虚拟机linux传文件,如何实现主机windows与虚拟机liunx之间互传文件
  16. html项目_趣图:我是一个 HTML 开发者,你们看看我做的这个项目咋样?
  17. HDU - 3506 Monkey Party
  18. SDUT OJ 顺序表应用3:元素位置互换之移位算法
  19. 算法笔记_面试题_18.动态规划_模板及示例十几道(下)
  20. 3DMM之EOS 原理解析

热门文章

  1. Linux单系统手动分区教程,【教程贴】Linux类系统手动操作篇--标准分区硬盘和目录扩容...
  2. jquery 数组indexof_如何实现一个简化版的 jQuery
  3. mysql 5.6 linux 64_Linux64位服务器编译安装MySQL5.6(CentOS6.4)
  4. ansible软件部署
  5. 7.3.8.1 - 并发多线程 死锁和递归锁 - 信号量
  6. CentOS 恢复 rm -rf * 误删数据(转)
  7. [转]数据科学家能力发展路线图
  8. 《LeetBook》leetcode题解(5):Longest Palindromic [M]——回文串判断
  9. 【转】Collections的copy()方法和ArrayList的大小问题
  10. 报名开始!第二届中国移动“梧桐杯”大数据应用创新大赛邀你夺52w大奖!