当前位置:首页 » 编程语言 » c语言判断素数的算法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言判断素数的算法

发布时间: 2022-01-19 14:05:24

1. 计算机c语言求素数算法,

这个有很多种

  1. 常用的 判断除以2.,除以。。。。。 这适用于判断具体的某个数组

  2. 剔除法 除以2的时候 把2的倍数全部剔除 以此类推。。。 这适合求多个

  3. 已有查找法,用文件数组保存一些素数,为方便使用直接查找 这个属于取巧类型严格不算算法

  4. 还有其他比较高级一些的算法这个可以具体找找

2. 新手求教 c语言素数判断算法

就是判断从2开始到一个数的平方根中若不能被他整除,那么该数就是素数;
网上代码是若能整除则跳出,所有条件不能整除则输出是素数。
他是只需要一种判断,不满足则跳出,那么跳出后i < n,所以可以用。
你的代码思路没有错,只不过网上没有使用的优化的算法,如果你想弄明白怎么优化,那你需要在数学中找答案

3. c语言编写函数判断素数

/判断是不是素数

#include<stdio.h>

int prime(int a);//函数声明

int main()

{

int n,i;

scanf("%d",&n);

if(prime(n)==1) //return返回值1

printf("prime");

else

printf("not prime") ;

}

int prime(int a)

{

int i;

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

if(a%i==0)

return 0;//a%i==0不成立

else

return 1;//a%i==0成立

}

(3)c语言判断素数的算法扩展阅读:

素数的算法

1、素数:除了1和本身外无法被其他自然数整除的数,叫做素数,也称质数,如:2,3,5,7一系列。

2、合数:比1大但不是素数的数称为合数,如:8,9,10一系列。

3、特殊的数字:1和0既不是素数也不是合数。

4、算法: 1>确定性算法 2>随机性算法 3>Eratosthenes算法。

4. 用C语言如何判断素数

素数又称质数,所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。

思路1、判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。

思路2、判断方法还可以简化。

m 不必被2~m-1之间的每一个整数去除,只需被2~√m之间的每一个整数去除就可以了。如果 m 不能被2~√m间任一整数整除,m必定是素数。例如判别17是是否为素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数。


原因:因为如果m能被2~m-1之间任一整数整除,其二个因子必定有一个小于或等于√m,另一个大于或等于√m。

例如16能被2、4、8整除,16=2*8,2小于 4,8大于4,16=4*4,4=√16,因此只需判定在2~4之间有无因子即可。


两种思路的代码请看解析。

拓展资料:

素数(prime number)又称质数,有无限个。素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。

网络——C语言

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

基本思想:把m作为被除数,将2—INT( )作为除数,如果都除不尽,m就是素数,否则就不是。

可用以下程序段实现:

void main()

{ int m,i,k;

printf("please input a number: ");

scanf("%d",&m);

k=sqrt(m);

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

if(m%i==0) break;

if(i>=k)

printf("该数是素数");

else

printf("该数不是素数");

}

将其写成一函数,若为素数返回1,不是则返回0

int prime( m%)

{int i,k;

k=sqrt(m);

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

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

return 1;

}

(5)c语言判断素数的算法扩展阅读:

筛法求素数

一、基本思想

用筛法求素数的基本思想是:

把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空时结束。

如有:

1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

1不是素数,去掉。剩下的数中2最小,是素数,去掉2的倍数,余下的数是:

3 5 7 9 11 13 15 17 19 21 23 25 27 29

剩下的数中3最小,是素数,去掉3的倍数,如此下去直到所有的数都被筛完,求出的素数为:

2 3 5 7 11 13 17 19 23 29

二、C++实现

1、算法一:令A为素数,则A*N(N>1;N为自然数)都不是素数。

#definerange2000

bool

IsPrime[range+1];

/*set函数确定i是否为素数,结果储存在IsPrime[i]中,此函数在DEV

C++中测试通过*/

voidset(boolIsPrime[])

{

inti,j;

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

IsPrime[i]=true;

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

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;的方式也是唯一的。

由于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<iostream>

#include<cmath>

usingnamespacestd;

intmain()

{

intN;cin>>N;

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(Location[p])

{

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

{

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

Location[k]=0;

}

}

}

intm=0;

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

{

if(Location[i]!=0)

{

cout<<Location[i]<<"";

++m;

}

if(m%10==0)cout<<endl;

}

cout<<endl<<m<<endl;

return0;

}

该代码在Visual Studio 2010 环境下测试通过。

以上两种算法在小数据下速度几乎相同。

6. C语言判断素数

按照你的程序凡是是奇数的都被判定为素数
for(i=2;i<n;i++)
{
a=n%i; //只要n是奇数,到最后必然a=1
}
有问题

按源程序作少许修改
#include <stdio.h>

int main()
{
int T,m;
int a=0;//定义为整型
scanf("%d",&m);
for(T=1;T<=m;T++)
{
int n,i;
scanf("%d",&n);
for(i=2;i<n;i++)
{
if(n%i==0) //如果能找到i将n整除,说明n不是素数,则让a与i相等,跳出循环
{
a=i;
break;
}
}
if (a==i)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}

这种算法是比较浪费资源的,一般采用让判定数从1除到判定数的平方根取整,本题中只需要让1<=i<=(int)(i的平方根)就可以了。这样可以节约很多时间

7. C语言算法中,判断一个数是素数要程序

/*To judge whether a number 'n' is prime number or not*/
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,k,prime=1;

do
{
printf("Please input a positive number:\nn=");
scanf("%d",&n);
}while(n<=0);

if(1==n)
prime=0;

k=(int)sqrt(n);

for(i=2;prime&&i<=k;i++)
if(0==n%i)
prime=0;

if(prime)
printf("%d is a prime number.\n",n);
else
printf("%d is not a prime number.\n",n);

return 0;
}