用C语言如何判断素数
98个回答
展开全部
素数又称质数。
定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
#include<stdio.h>
int main( )
{
int num,i;
scanf("%d",&num);
for(i=2;i<=num;i++)
if(num%i==0 && num!=i)
{
printf("不是质数\n");
return 0;
}
printf("是质数\n");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果数字比较小,可以用2到这个数每个除一遍。
for(i=2;i<n;i++) if(n%i==0) {printf("不是素数"); break;}
如果数字比较大,可以先用sqrt将数字开方,然后从2开始用素数进行除法运算。这个思路根据题目要求的不同,优化写法也不一样。
比如,你给的题目是求一个数是不是素数,那么就先计算2,再计算3,5,7,9……一直到这个数的开方值。好处是减少了近一半的计算量(大于开方值的不进行计算,大于2的偶数也不计算)。
for(i=2;i<n;i++) if(n%i==0) {printf("不是素数"); break;}
如果数字比较大,可以先用sqrt将数字开方,然后从2开始用素数进行除法运算。这个思路根据题目要求的不同,优化写法也不一样。
比如,你给的题目是求一个数是不是素数,那么就先计算2,再计算3,5,7,9……一直到这个数的开方值。好处是减少了近一半的计算量(大于开方值的不进行计算,大于2的偶数也不计算)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include "stdio.h"
void main (void)
{
int p = 1;
int i,j,a=1;
while (p)
{
printf ("请输入一个正整数来判断是不是素数,以回车键结束:\n");
scanf ("%d",&j);
if (j==1)
printf ("%d:不是素数\n",j);
else
{
for (i=2;i<j;i++)
if (j%i==0)
{
printf ("因式:%d\t/%d\t=%d\n",j,i,j/i);
a=0;
}
if (a)
printf ("%d:是素数\n",j);
else
printf ("%d:不是素数\n",j);
}
printf ("\n");
printf ("如需退出请关闭,否则继续\n");
printf ("\n");
}
}
void main (void)
{
int p = 1;
int i,j,a=1;
while (p)
{
printf ("请输入一个正整数来判断是不是素数,以回车键结束:\n");
scanf ("%d",&j);
if (j==1)
printf ("%d:不是素数\n",j);
else
{
for (i=2;i<j;i++)
if (j%i==0)
{
printf ("因式:%d\t/%d\t=%d\n",j,i,j/i);
a=0;
}
if (a)
printf ("%d:是素数\n",j);
else
printf ("%d:不是素数\n",j);
}
printf ("\n");
printf ("如需退出请关闭,否则继续\n");
printf ("\n");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int isprime(int n){
int i=2;
for(;i<=sqrt(n);i++)
if(n%i == 0)
return 0;
return 1;
}
这个是用于判断是不是素数的子函数,输入是待判断的数字n,返回值为0则不是素数,返回值为1则为素数。
需要在头文件加#include<math.h>
int i=2;
for(;i<=sqrt(n);i++)
if(n%i == 0)
return 0;
return 1;
}
这个是用于判断是不是素数的子函数,输入是待判断的数字n,返回值为0则不是素数,返回值为1则为素数。
需要在头文件加#include<math.h>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
判断质数的方法有很多种,就我们学的定义而言,就是从2开始,一直到开跟的数,如果能整除就非质数。
int i=3,n;
while(scanf("%d",&n))
{
if(n==2||n==3)
printf("%d 为质数\n",n);
else if(!(n%2))
printf("%d 为合数\n",n);
else if(n<2)
printf("%d 非质非合\n",n);
else
while(i<n)
{
if(!(n%i)) //整除了
{
printf("%d 为合数\n",n);
break;
}
if(i>sqrt(n))
{
printf("%d 为质数\n",n);
i=3;//下次循环初始化。
break;
}
i+=2;//因为+1一定为偶数,连2都不能整除,那么直接排除掉了,减少运算。
}
}
int i=3,n;
while(scanf("%d",&n))
{
if(n==2||n==3)
printf("%d 为质数\n",n);
else if(!(n%2))
printf("%d 为合数\n",n);
else if(n<2)
printf("%d 非质非合\n",n);
else
while(i<n)
{
if(!(n%i)) //整除了
{
printf("%d 为合数\n",n);
break;
}
if(i>sqrt(n))
{
printf("%d 为质数\n",n);
i=3;//下次循环初始化。
break;
}
i+=2;//因为+1一定为偶数,连2都不能整除,那么直接排除掉了,减少运算。
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询