判断一个数是否是素数

lulipeng_cpp 2012-06-28 12:08:02
大家有没有判断一个数是否是素数的方法呀???

谢谢赐教。。。
...全文
356 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2012-06-28
  • 打赏
  • 举报
回复

bool IsPrime(unsigned n)
{
if(n<2)
return false;
for(unsigned i=2;i*i<=n;i++)
if(n%i==0)
return false;
return true;
}


这方法效率很高,返回true表示是素数
tongzhipeng5699 2012-06-28
  • 打赏
  • 举报
回复

#include <iostream>
#include <math.h>
using namespace std;

bool isPrimer(int n)
{
bool flag=true;
if(n==1) return false;
for(int i=2;i<=sqrt(n);i++)
if(n%i==0) {
flag=false;
break;
}

return flag;
}
int main(void)
{
cout << "please input a number" << endl;
int num;
cin>>num;
if(isPrimer(num)) {
cout << num << "是素数" << endl;
}else {
cout << num << "不是素数" << endl;
}
return 0;
}
烟袅许伊 2012-06-28
  • 打赏
  • 举报
回复

素数其实就是素数。。。
[Quote=引用 5 楼 的回复:]

负数不是素数,小数不是素数,复数不是素数,……
(^_^)
[/Quote]
赵4老师 2012-06-28
  • 打赏
  • 举报
回复
负数不是素数,小数不是素数,复数不是素数,……
(^_^)
烟袅许伊 2012-06-28
  • 打赏
  • 举报
回复
心得就是好好学数学 。。。
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:
百度,很多。


谢谢
那你有没有啥关于这方面的心得呢?
[/Quote]
xunxun 2012-06-28
  • 打赏
  • 举报
回复
从2到这个数的根号做个循环

判断是否有个数整除这个数
lulipeng_cpp 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
百度,很多。
[/Quote]

谢谢
那你有没有啥关于这方面的心得呢?
烟袅许伊 2012-06-28
  • 打赏
  • 举报
回复
百度,很多。
烟袅许伊 2012-06-28
  • 打赏
  • 举报
回复
当然这种高了,而且如果加上i+=2更高一点,不过筛选法更高
[Quote=引用 12 楼 的回复:]

引用 8 楼 的回复:
C/C++ code

bool IsPrime(unsigned n)
{
if(n<2)
return false;
for(unsigned i=2;i*i<=n;i++)
if(n%i==0)
return false;
return true;
}



这方法效率很高,返回tru……


是计算2到该数的平方根效率……
[/Quote]
lulipeng_cpp 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
C/C++ code

bool IsPrime(unsigned n)
{
if(n<2)
return false;
for(unsigned i=2;i*i<=n;i++)
if(n%i==0)
return false;
return true;
}



这方法效率很高,返回tru……
[/Quote]

是计算2到该数的平方根效率高,还是用 for(unsigned i=2;i*i<=n;i++)
效率更高点?

lulipeng_cpp 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
C/C++ code

#include <iostream>
#include <math.h>
using namespace std;

bool isPrimer(int n)
{
bool flag=true;
if(n==1) return false;
for(int i=2;i<=sqrt(n);i++)
if(n%i=……
[/Quote]

是计算2到该数的平方根效率高,还是用 for(unsigned i=2;i*i<=n;i++)
效率更高点?

lulipeng_cpp 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
负数不是素数,小数不是素数,复数不是素数,……
(^_^)
[/Quote]


额,这个的确。。。
N0bug 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
大家有没有判断一个数是否是素数的方法呀???

谢谢赐教。。。
[/Quote]
#include <iostream>
//////////////////////////////////////////////////////////////////////////
#define N_PRIME 30000
#define SHIFT 5
#define BITSPERINT (1<<SHIFT)
#define MASK BITSPERINT-1

int prime[N_PRIME/BITSPERINT+1];
static inline void set(int i)
{
prime[i>>SHIFT] |= (1<<(i&MASK));
}

static inline void clr(int i)
{
prime[i>>SHIFT] &= ~(1<<(i&MASK));
}


static inline int test(int i)
{
return prime[i>>SHIFT] & (1<<(i&MASK));
}
//////////////////////////////////////////////////////////////////////////
bool is_prime(int n);//判断一个整数n是不是素数 注意只针对正数 负数一律视为非素数
void gen_prime_table(void);//生成素数表 一劳永逸
//////////////////////////////////////////////////////////////////////////
using namespace std;
//////////////////////////////////////////////////////////////////////////

int main()
{
//筛法生成素数表
gen_prime_table();
//unit test
int i;
for(i=2;i<N_PRIME;i++)
if (is_prime(i))
cout<<i<<" ";

return 0;
}

bool is_prime(int n)//简单包装
{
if (n>=2)
{
if(test(n))
return false;
else
return true;
}
else
return false;
}
void gen_prime_table(void)
{
int i,j;
for ( i=2;i<N_PRIME;i++)
if (!test(i))//
for (j=i;i*j<N_PRIME;j++)
set(i*j);//不是素数
}

65,182

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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