C语言中的素数是什么意思

C语言中的素数是什么意思,第1张

素数是只能被1和它本身整除的

数。

实现代码:

#include

int

main(void)

{

int

i,

n

=

2;

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

scanf("%d",

&i);

while

(1)

{

if

(i%n

==

0)

{

break;

}

n++;

}

if

(n

==

i)

{

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

}

else

{

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

}

return

0;

}

素数,也叫质数,就是指除了1和该数本身以外,不能被其他任何整数整除的正数。

 #include<stdioh>#include<mathh>void main(){    int m, k, i, n=0;    for(m=1; m <= 200; m=m+2)    {        k = sqrt(m);        for(i=2; i <= k; i++)        if(m % i == 0)    break;        if(i >= k + 1)        {            printf("%5d",m);            n = n + 1;

素数

所谓素数是指除了1和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被2~16的任一整数整除。因此判断一个整数m是否是素数,只需把m被2~m-1之间的每一个整数去除,如果都不能被整除,那么m就是一个素数

另外判断方法还可以简化。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=28,2小于4,8大于4,16=44,4=√16,因此只需判定在2~4之间有无因子即可)

以下是求1到20的素数的C语言程序:

```c

#include <stdioh>

int main() {

int i, j, flag;

printf("1-20的素数有:");

for (i = 2; i <= 20; i++) {

flag = 0;

for (j = 2; j <= i/2; j++) {

if (i%j == 0) {

flag = 1;

break;

}

}

if (flag == 0 && i != 1) {

printf("%d ", i);

}

}

return 0;

}

```

程序的主要思路是使用两层循环,外层循环遍历1到20之间的整数,内层循环遍历当前数除去1和自身后的所有数,判断是否有整除的情况。如果存在因子,则说明该数不是素数,将标志位flag置为1,跳出内层循环。如果内层循环遍历完毕后,flag仍等于0,则说明该数是素数,将其输出即可。需要注意的是,1不是质数

输出结果为:

```

1-20的素数有:2 3 5 7 11 13 17 19

```

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

可用以下程序段实现:

void main()

{ int m,i,k;

printf("please input a number:\n");

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;

}

扩展资料:

筛法求素数

一、基本思想

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

把从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为素数,则AN(N>1;N为自然数)都不是素数。

#define range 2000

bool

IsPrime[range+1];

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

C++中测试通过/

void set(bool IsPrime[])

{

int i,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=2i;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=29,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^2q,p^3q,,(q是比p大而没有被删除的数),一直到pq>N为止。

因为每个非质数都只被删除一次,可想而知,这个程序的速度一定相当快。依据Gries与Misra的文章,线性的时间,也就是与N成正比的时间就足够了(此时要找出2N的质数)。

代码如下:

#include<iostream>

#include<cmath>

using namespace std;

int main()

{

int N; cin>>N;

int Location=new int[N+1];

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

Location[i]=i;

Location[1]=0; //筛除部分

int p,q,end;

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

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

{

if(Location[p])

{

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

{

for(int k=pq;k<=N;k=p)

Location[k]=0;

}

}

}

int m=0;

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

{

if(Location[i]!=0)

{

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

++m;

}

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

}

cout<<endl<<m<<endl;

return 0;

}

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

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

参考资料:

百度百科-筛法求素数

#include <stdioh>

int main()

{

  int a=0;

  int num=0;

int i;

  printf("输入一个整数:");

  scanf("%d",&num);

  for(i=2;i<num;i++){

      if(num%i==0){

          a++;

      }

  }

  if(a==0){

      printf("%d是素数。\n", num);

  }else{

      printf("%d不是素数。\n", num);

  }

  return 0;

}

扩展资料:

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。

基本算法:若 k%m==0 则说明 k 不是素数。

判断整数n是否为素数——采用枚举法求解。

采用枚举算法解题的基本思路:

(1)确定枚举对象、枚举范围和判定条件;

(2)枚举可能的解,验证是否是问题的解。

枚举算法的一般结构:while循环。

参考资料来源:百度百科-枚举法

你的C语言求素数的程序我帮你改完了(仅两处错误),你看看吧(改动的地方见注释)

#include<stdioh>

#include<mathh>

int main()

{

 int n,i=1;

 int r;//这里float r;改成int r;因为整数除以整数所得余数还是整数

 printf("input a number n=");

 scanf("%d",&n);

 for(i=2;i<=n-1;)

 {

  r=n%i;

  if(r==0)

  {

   printf("%d不是素数\n",n);

   return 0;

  }

  else

  {

   i=i+1;

   if(i>sqrt(n))

   {

    printf("%d是素数\n",n);

    return 0;

   }

   //else//这里去掉else语句块,因为如果i>sqrt(n)n就是素数,如果i<sqrt(n)应该让程序自动执行下去

   //{

    //return(n);

   //}

  }

 }

}

除2以外,素数皆为奇数,所以对2单独处理,从3开始,将100以内的奇数逐一进行素数考察,是则输出,不是则跳过。另设一计数变量控制换行,每输出5个素数添加一个回车。代码如下:

#include "stdioh"

int main(int argc,char argv[]){

int i,n,t;

pr

#include

#include

main()

{

int a,i,flag,count=0;

for(a=1;a <=100;a++)

{

flag=0;

for(i=2;i

#include int main()

{

int i,n,k,b;

for(i=1,b=1;i<=100;i++)

{

for(n=2;n {

k=i%n;

if(k==0)

break;

}

扩展资料:

C语言注意事项:

1、预编译命令不是语言语句,不使用分号,不占用运行时间。

2、在IDE中通常包括编辑器,编译器,汇编器和链接器,在这个过程中是语言等级逐级降低的过程,从最高级的c语言到中级语言汇编语言再到低级语言机器语言,编辑器生成文件为c文件,编译器生成的文件为obj汇编器生成的文件为0文件,链接器生成的是exe文件。

3、注意 return和exit的区别, return是让本函数运行结束,而exit是让本程序运行结束。

4、在指针定义时,一定要进行初始化,否则就会出现意想不到的错误,如果不能找到对应地址赋值,那就赋给NULL(注意大写)。

5、gets可以 scanf办成办不成的事,就是可以接受空格,puts在最后会输出一个换行。

以上就是关于C语言中的素数是什么意思全部的内容,包括:C语言中的素数是什么意思、素数的C语言程序怎么做、c语言程序设计 求1到20的素数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10144583.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存