sqrt()函数求素数的问题?

liang800518 2010-05-23 03:40:22
#include "stdio.h"
#include "math.h"
int IsPrime(int n)
{
int i,j;
j=sqrt(n)+1;
for(i=2;i<j;i++) /*让整数 n 被从 2 到 n 的平方根之间的数一一整除*/
if(n%i==0)
return 0; /*若 n 能被其中某一个数整除,则不是素数,函数返回 0*/
return 1; /*若 n 不能被其中任何一个数整除,则 n 是素数,函数返回 1*/
}
main()
{
int i,count=0;
printf("The prime between 1 to 100 are:\n\n");
for(i=2;i<=100;i++)
{
if(IsPrime(i))
{
printf("%5d",i);
count++;
if(count%6==0)
printf("\n\n"); /*每输出 6 个素数,就另起一行*/
}
}
getch();
}
大家能帮我解释一下,为什么sqrt()能判断素数呢,谢谢了!
...全文
1093 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liang800518 2010-05-23
  • 打赏
  • 举报
回复
豁然开朗啊,收藏了,呵呵
liutengfeigo 2010-05-23
  • 打赏
  • 举报
回复
sqrt()是求平方根
2010-05-23
  • 打赏
  • 举报
回复 1
[Quote=引用 3 楼 skyworth98 的回复:]

假如某个数n不是素数,则一定可以分解成x*y形式。
由此可以推论,n不是素数,则一定可以被某个小于n的数整除。
而对n来说,最小公因数最大只可能为n的平方根,因为假如存在一个大于n平方根的公因数x,则一定存在另一个公因数y=n/x, y<x。从上面的推理可以得出结论,如果n不能被所有小于等于它的平方根的整数整除,则n为素数。
[/Quote]
up
skyworth98 2010-05-23
  • 打赏
  • 举报
回复
假如某个数n不是素数,则一定可以分解成x*y形式。
由此可以推论,n不是素数,则一定可以被某个小于n的数整除。
而对n来说,最小公因数最大只可能为n的平方根,因为假如存在一个大于n平方根的公因数x,则一定存在另一个公因数y=n/x, y<x。从上面的推理可以得出结论,如果n不能被所有小于等于它的平方根的整数整除,则n为素数。

[Quote=引用楼主 liang800518 的回复:]
#include "stdio.h"
#include "math.h"
int IsPrime(int n)
{
int i,j;
j=sqrt(n)+1;
for(i=2;i<j;i++) /*让整数 n 被从 2 到 n 的平方根之间的数一一整除*/
if(n%i==0)
return 0; /*若 n 能被其中某一个数整除,则不是素数,函数返回 0*/
return 1;……
[/Quote]
liang800518 2010-05-23
  • 打赏
  • 举报
回复
能给解释解释为什么“是只需要判断到n的平方就可以了”吗?
selooloo 2010-05-23
  • 打赏
  • 举报
回复
不是sqrt()能判断素数,是只需要判断到n的平方就可以了,这个已经被证明过的

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧