C语言编程:教你如何判断一个数是否为素数

创始人
2024-12-31 12:42:08
0 次浏览
0 评论

用C语言编写一段程序判断一个整数是否是素数。

这是C编程语言:

#include

intmain(

{

inti,j,k=0;

for(i=2;i<10000>

{

for(j=2;j*j<=i;j++

if(i%j==0)

中断;

i

{

printf("%d",i);\n");

}

}

}

扩展信息:

这个想法C语言中判断数字一的思路1:判断整数m是否为素数,只要m是2~m-1之间的每一个整数不可整除,m是素数。

此外,如果m不可被任何整数整除,则方法可以更简单。
2到m之间,则m必须是素数。
可以整除,可以确定17是质数

原因:如果m能被2到m-1之间的任何整数整除,则其两个必须小于或等于,另一个大于或等于。
到-m。
例如,16能被2、4、8整除,16=2*8,2小于4,8大于4,16=4*4,4=√16,这就是你需要确定的。
是否有2到4个Can之间的情况。

求C语言中判断素数的代码!!!!!

基本思想:用m作为被除数,2-INT()作为除数。
如果两者不可整除,则m为素数,否则不是。

可以用下面的程序段来实现:

voidmain()

{intm,i,k;

printf("请输入数字:\n");

scanf("%d",&m);

k=sqrt(m);

for(i=2;i

if(m%i==0)break;

=k)

printf("这个数是素数");

else

printf("这个数不是素数");

else

printf("这个数不是素数");

>

}

写成函数如果是质数则返回1,否则返回它返回0

intprime(m%)

{inti,k;

>

k=sqrt(m);

for(i=2;i

if(m%i==0)return0;

return1;

}

扩展信息:

查找目测素数

1基本思想

基本思想使用过滤方法求素数是:

将1开始的正整数在一定范围内从小到大排列,1如果不是素数,则先过滤掉。
从剩余的数中选择最小的质数,然后删除倍数。
依此类推,直到过滤器空了。

如果是:

12345678910

11121314151617181920

21222324252627282930

如果1不是素数,删除它。
剩下的数中,2是最小的,是质数。
如果去掉2的倍数,剩下的数是:

357911131517192123252729

剩下的数是3。
是最小的,是质数去掉3的倍数,以此类推所有数字经过筛选后,质数为发现:

235711317192329

2C++实现

1;N是自然数)素数。

#definerange2000

bool

IsPrime[range+1];

/*set该函数判断i是否为素数。
结果存储在IsPrime[i]DEV中

C++中通过的测试*/

voidset(boolIsPrime[])

{

inti,j;

for(i=0;i<=area;++i)

ISPrime[i]=true;

IsPrime[0]=IsPrime[1]=false;

for(i=2;i<=range;++i)

for(i=2;i<=range;++i)

{

if(

IsPrime[i])

{

for(j=2*i;j<=range;j+=i)

IsPrime[j]=false;}}}

2.

解释:解决这个问题的技巧是如何安排删除的顺序,使得每个非素数只被删除一次。
我在中学时学过一个因子定理。
他说任何非素数都可以分解为素数的连续乘积。

例如16=2^4、18=2*3^2、691488=2^5*3^2*7^4等。
如果分解中最小的素数写在最左边,16=2^4,18=2*9,691488=2^5*21609,;

也就是说,合数N写成N=p^k*q,此时q明显大于p,因为p是因式分解中最小的素数。
由于因式分解的唯一性,将任意合数N写成N=p^k*q的方式也是唯一的。

=p的关系,删除非素数时,如果已知p是素数,可以先删除p^2,p^3,p^4,...,然后删除pq,p^2*q,p^3*q,...,(q是大于p的数,但不删除),直到pq>N。

因为每个非素数只删除一次,所以可以想象这个程序的速度一定相当高。
根据Gries和Misra的文章,线性时间,即与N成正比的时间就足够了(此时我们需要找到2N的质数)。

代码如下:

#include

#include

使用命名空间std;

intmain()

{

intN;

int*Location=newint[N+1];

for(inti=0;i!=N+1;++i)

Location[i]=i;

Location[1]=0//过滤掉部分

intp,q,end;

end=sqrt((double)N)+1;

for(p=2;p!=end;++p)

{

if(位置[p])

{

for(q=p;p*q<=N;++q)

{

for(intk=p*q;k<=N;k*=p)

位置[k]=0;

}

}

}

intm=0;

for(inti=1;i!=N+1;++i)

{

if(位置[i]!=0)

{

cout<<位置[i]<<"";

++m;

}

if(m==0)cout<

}

cout<

返回0;

}

这段代码在VisualStudio2010环境下测试通过。

小数据下,上述两种算法的速度几乎相同。

参考:百度百科-sift法求素数

热门文章
1
Python中的format()方法:字... formatformat在python中的含义2222.22E+00Format...

2
Python编程入门:全面解析Pytho... python的基本语法基本的Python语法如下:1.变量的定义。在编程语言中,...

3
Python字符串大小写转换方法全解析 python中字母的大小写转换怎么实现?在Python中,大小写转换由内置函数处...

4
Python字典:轻松获取最小值键与计算... python在一个字典里,返回值最小元素对应的键,救解在Python字典中,如果...

5
Python字符串去重空格:strip(... Python去除字符串中空格(删除指定字符)的3种方法在Python编程中,处理...

6
Python数组元素数量计算技巧分享 Python输出数组有多少个元素?简介:在本文中,首席CTO笔记将向您介绍Pyt...

7
简述python中pass的作用 pass语句的作用在许多编程语言中,包括Python;PASS语句用于在代码块中...

8
Python def 关键字详解:函数定... def是什么意思编程?戴夫是什么意思?def是Python中的函数定义关键字,用...

9
python不区分大小写的方法 Python字符串不区分大小写在Python中,字符串操作默认区分大小写。但有时...

10
Python字典操作全解析:添加、修改、... &#65279;Pythondict字典基本操作(包括添加、修改、删除键...