求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;

}

扩展资料:

筛法求素数

一、基本思想

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

把从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为自然数)都不是素数。

#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=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>

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;p*q<=N;++q)

{

for(int k=p*q;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 环境下测试通过。

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

参考资料:百度百科-筛法求素数




张店区19661136390: 如何编写一个C语言程序判断一个数是否是素数? -
狐码消渴: 1. 思路1: 判断一个整数m是否是素数,只需把m被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么m就是一个素数.代码如下: #include <stdio.h> int main(){ int a=0; // 素数的个数 int num=0; // 输入的整数 printf("输入一个整数...

张店区19661136390: 求C语言编程,判断一个数是不是素数 -
狐码消渴: 用6n+1,6n-1,判断简单.筛选法也可以 给出筛选法的代码 #include <stdio .h>#define MAXSIZE 200 #define DELETED 1 #define KEPT 0void main(void) {int sieve[MAXSIZE+1]; /* 待筛数组 */int count = 1; /* 素数总数 */int prime;int i, k;...

张店区19661136390: 求C语言中 判断素数的 代码!!!!! -
狐码消渴: 基本思想:把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...

张店区19661136390: C语言编写一个程序判断一个数是否为素数?急求 -
狐码消渴: 目的:判断一个数是否为素数# include <stdio.h> int main(void) { int m; int i; scanf("%d",&m); for(i = 2; i < m; i++) //2到(m-1)的数去除m { if(m% i == 0) // 判断能否整除 break; } if (i == m) printf("YES!\n"); else printf("No!\n"); } for循环的功能...

张店区19661136390: 判断素数的C语言代码 -
狐码消渴: 你的程序怪怪,int Prime(int num) 函数中怎么又重复定义一个num变量.编译就无法通过.把int Prime(int num) 函数中定义的num变量去掉就可以编译了.而且我在VC下试了,程序没错呀.另外int Prime(int num) 函数中如果是素数而完成循环后应该有个return语句返回(返回非0就可以),你没有写.

张店区19661136390: C语言编程:判断素数.代码如下 -
狐码消渴: #include<stdio.h> void main() { int i,x,flag; flag=1; scanf("%d",&x); for(i=2;i<x;i++) if(x%i==0) { flag=0; printf("不是"); break; //添加 } if(flag==1) printf("是"); }

张店区19661136390: 素数判断c语言程序 -
狐码消渴: #include int p(int n) { int i=2; while(i { if(n%i==0) break; i++; } if(i==n) return 1; else return 0; } int main() { int n=0; printf("输入一个正整数\n"); scanf("%d",&n); printf("%d%s\n",n,p(n)?"是素数":"不是素数"); return 0; }

张店区19661136390: C语言编写一个程序判断一个数是否为素数?急求 -
狐码消渴: 1、首先启动vb6,新建一个标准exe文件,调整窗体的大小.2、选择窗体,设置属性中font属性值,字体为田英章毛笔楷书,字号为一号.3、双击窗体进行代码编写区域,设置过程为click,对象为窗体form1.4、接着输入代码内容:代码如下Dim s As Integer,n = InputBox("请输入n的值", "提示", vbYesNo).5、点击启动按钮进行编译调试,根据错误提示修改,直至无误为止.6、点击窗体会弹出提示对话框,输入要判断素数的数值,点击确定按钮,这个时候自动进行判断并给出结果.7、执行文件-保存工程命令,按照提示依次保存窗体和工程即可.

张店区19661136390: 判断素数C语言编程 -
狐码消渴: #include<stdio.h> main() {int i,j=0,a=0;/*a存素数个数*/ for(i=2;i<=100;i++) /*i作被除数*/ { for(j=2;j<=i;j++) /*j做被除数*/ if(i%j==0) break; /*如果i能被j整除,则退出小循环*/ if(i==j) { a++; /*如果j=i,则说明i只能被自身整除,i为素数*/ printf("%d ",i); /*输出i(素数)*/ } /*返回大循环*/ } /*结束循环*/ printf("\n"); /*换行*/ printf("%d\n",a); /*输出素数个数*/ }

张店区19661136390: c语言编程判断素数 -
狐码消渴: 1、函数最好不要声明在另外一个函数体内;2、“=”是赋值符号,“==”才是判断是否相等的符号.#include int prime(int x); int main() { int a; printf("please enter a integral number:\n"); scanf("%d",&a); int c=prime(a); if(c==1) printf("a is a...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网