c语言编程求素数
‘壹’ c语言求素数
int fun(int n)
{ int a[10000], i,j, count=0;
/*将a数组赋值2-20*/
for (i=2; i<=n; i++)
a[i] = i;
i = 2;
/*将2到20之间2的偶数倍和2个偶数之和的数赋值0*/
while (i<n)
{
for (j=a[i]*2; j<=n; j+=a[i])
a[j] = 0;
i++;
/*判断如果查找到得是已经被赋值为0的数则去寻找下一个数*/
while (a[i]==0)
i++;
}
printf("\nThe prime number between 2 to %d\n", n);
/*输出在0-20之间的素数并用count计数*/
for (i=2; i<=n; i++)
if (a[i]!=0)
{
count++;
printf( count%15?"%5d":"\n%5d",a[i]);
}
return count;
‘贰’ c语言中如何求素数
#include<stdio.h>
#include<math.h>
void main() // 这里不要搞错了,main
{
int i,n;
printf("输入一个整数n");
scanf("%d",&n);
n=abs(n);
if(n>2)
{
for(i=2;i<n;i++)// 在for下面跟个if判断,如果你输入4的话,这个程序打印两次4不是
if(n%i==0&&n==i)
scanf("%d是素数",n); break ;// 这里应该是printf了吧,
else
scanf("%d不是素数",n); break;// 这样会比较好点
}
else
scanf("%d不是素数",n);// 2就不是素数么,
}
这样也有问题,当你输入5的时候,for语句先判断能否整除2,不能整除2的话,就打印不是素数,写个函数是比较好的方法
‘叁’ c语言求素数的算法
根据素数的性质,代码设计如下:
设计一:判断n是否能被1~n-1整除,不能整除为素数
#include<stdio.h>
int main()
{
int i, n;
scanf("%d", &n);
for (i = 2; i < n ; i++)
{
if (n%i == 0)
break;
}
if (i < n) printf("This is not a prime.");
else printf("This is a prime.");
return 0;
}
设计二:判断n是否能被2~√n间的整数整除,不能整除为素数
#include<stdio.h>
#include<math.h>
int main()
{
int n,i;
double k;
scanf("%d", &n);
k = sqrt(n);
for (i = 2; i <= k;i++)
{
if (n%i == 0) break;
}
if (i <=k) printf("This is not a prime.");
else printf("This is a prime");
return 0;
}
(3)c语言编程求素数扩展阅读:
1.素数的定义是只能被1和他本身整除,1不是素数.因此要判断一个数是否为素数.就要判断它能不能被比他小的所有素数整除,这是一个算法.(写到算法时,我只能写出用它除以比他小的所有数,造成运算速度低下)
2.如果一个质数大于根号n,而n可以除尽它,那么n必然也可以除尽一个更小的质数。由此可以得到一个法2较快的素数判断算法
‘肆’ 用C语言如何判断素数
按照如下步骤即可用C语言判断素数:
1、首先打开visual C++ 6.0,然后点击左上角的文件,再点击新建。
‘伍’ C语言中素数怎么求
素数求法有很多种。。如果不要求时间暴力尝试是可以的。用算法的话个人认为还是用这个方法最快最好,就是把不是素数的数字排除,剩下的就是素数了。这个程序蛮简单的。。你看看能不能理解ps:这是我们acm培训的内容,很难得哦
void getprime(int n) //n是素数筛选区间
{
int i , j ;
bool flag[N];
memset ( flag , true , sizeof ( flag ) );
int count = 0; //记录找到的素数个数
for( i=2 ; i<=n ; i++ )
{
if ( flag[i] ) prime[++count]=i; //未被筛掉的就是素数
for( j=1 ; j<=count && i*prime[j] <= n ; j++) // prime[j]表示第j个素数
{
flag[ i*prime[j] ] = false; //i*prime[j]表示被i筛掉的
if( i%prime[j]==0 ) break;
}
}
}
这个算法是一个很快的算法,详细的解释是举例:
i=6的时候,prime[ ]={2,3,5}
第一次6筛掉了6*2=12,然后判断6%2==2,break;假设循环没有break,接着6即将筛6*3=18,而事实上18是被9筛掉的。
统一化分析:
不妨设i=p*r (p<r),执行break是因为i%p==0,故此时i筛掉的是x1=i*p=(p*r)*p;如果i可以筛掉x1后面的数x2,x2=i*q=(p*r)*q
由x2>x1-》q>p;那么x2可以写成x2=(q*r)*p,由于 q*r>i ,所以x2一定可以被i之后某个数字(q*r)筛掉,就不需要用i去筛掉。
‘陆’ 求判断素数的C语言程序
C语言-寻找素数
附代码:
#include<stdio.h>
#include<math.h>
int main()//原理:设ab=c,a<b,则有a<根号c<b。若设a恒小于根号c,则只需判断a是否为因数
{
int a, b;
printf("请按从小到大输入两个素数:");
scanf_s("%d %d", &a, &b);
int n = 0,m=0,sum = 0;
double i, j;//i是从a到b的待筛选数,j是从2到根号i的除数,要判断j是否为i的因数
for (i = a; i <= b; i++)
{
m = 0;
int c = int(pow(i, 0.5));
for (j = 2; j <= c; j++)
{
if ((i / j - int(i / j)) == 0.0)
{
m++;//m是i被从2到根号i的j除了之后,商为整数,即发现j是i的因数的次数
}
}
if (m==0)
{
printf("找到素数:%d
", int(i));
n++;
sum = sum + i;
}
}
printf("大于等于%d,小于等于%d的素数的个数为:%d
", a, b, n);
printf("它们的和为:%d", sum);
return 0;
}
‘柒’ c语言怎么求素数
在C语言中求素数有很多种方法。刚入门的话,最基本的就是根据素数的定义来判断一个数是不是素数。要判断一个数n是不是素数,就用一个循环,从2一直到n -1,如果都不能整除n,那么n就是一个素数,否则就不是素数。
改进一点的方法就是只要判断到n/2就可以了。再高效一点的办法,就只要判断到根号n就可以了。判断的依据是相同的。
‘捌’ 如何求C语言素数
如果一个数是素数,只要判断他是否能被2到这个数的开方之间的数整除就行了。
int flag=0;
if(m==2){ //先判断是不是2
flag=1;
}
else{
for(int i=2;i<=sqrt(m);i++){
flag=1;
if(m%i==0){ //不是素数
flag=0;
break;
}
}
}
return (flag==1)?m:-1; //判断是否为1,为1输出m,否则输出-1 ,-1表示不是素数
如果是求某个范围的素数,可以连续调用这个方法,上面是常规的方法,还有更好的方法自己去查一下。
‘玖’ C语言求素数
/*求素数的三种方法
一:for(i=2;i<=(n-1);i++)
if(n%i==0)i在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数
二:for(i=2;i<n/2;i++)
if(n%i==0) /*i在2到n/2之间任取一个数,如果n能被整除则不是素数,否则就是素数
三:for(i=2;i<(n=sqrt(n));i++)
if(n%i==0) /*i在2到sqrt(n)之间任取一个数,如果n能被整除则不是素数,否则就是素数,在下省了下面的输出步骤*/
/*在本程序中使用第三种方法来求解*/
#include <stdio.h>
#include <math.h>
int main(void)
{
int i; /*外循环*/
int j; /*内循环*/
int flag; /*素数标志,flag为1则此数为素数*/
flag = 0;
//int n;
i = 2;
while( i <= 100)
{
j = 2;
flag = 1; /*假设此数为素数*/
while(j <= (int) sqrt(float(i)))
{
if(0 == (i %j))
flag = 0; /*根据第三种算法可知次数不为素数*/
j ++;
}
if(flag)
printf("%d\t",i);
i++;
}
printf("\n");
return 0;
}
‘拾’ c语言求素数
【例】判断m是否素数。
N-S流程图:
#include<math.h>
main()
{
int m,i,k;
scanf(“%d”,&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)
printf(“%d is a prime number\n”,m);
else
printf(“%d is not a prime number\n”,m);
}
【例】求100至200间的全部素数。
#include<math.h>
main()
{
int m,i,k,n=0;
for(m=101;m<=200;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)
{printf(“%d”,m);
n=n+1;}
if(n%5==0)printf(“\n”);
}
printf(“\n”);
}