用C语言如何判断素数

如题所述

第1个回答  2018-06-26
素数是只能被1 或本身整除的数。例如3,5等等。输入一个数判断是否能被2...n-1整除,若能就不是素数,否则即为素数。故使用循环语句依次试探输入的k值是否能被2...k-1整除,程序如下:
#include<math.h>
#include<stdio.h>
int main(void)
{
int i,k,sk;
printf("please input a number:\n");
scanf("%d",&k); /* 输入待判定的数k*/
for(i=2;i<k;i++)

if(k%i==0)break; /* k被i整除时终止循环,k不是素数,此时i<=k */
if(i>=k) /* 若i>sk,则k是素数 */
printf("%5d 是素数",k); /* 输出素数k */

printf("\n");
return 0;
}
而事实上当循环到sqrt(k)的时候,如果能整除就已经不是素数了,可减少循环次数,故程序可改进如下:
#include<math.h>
#include<stdio.h>
int main(void)
{
int i,k,sk;
printf("please input a number:\n");
scanf("%d",&k); /* 输入待判定的数k*/
sk=(int)sqrt(k);
for(i=2;i<=sk;i++)
if(k%i==0)break; /* k被i整除时终止循环,k不是素数,此时i<=k */
if(i>sk) /* 若i>sk,则k是素数 */
printf("%5d 是素数",k); /* 输出素数k */

printf("\n");
return 0;
}
第2个回答  2018-07-15

大概的思想是相同的  我用的是c++ 学过c肯定看的懂。大晚上的打字不容易,求采纳

cout就是输出    exit(0)就是终止程序   如果不用exit(0)那就加几个判断语句

如果你只学过c,那么方法二更容易懂

但是方法一中的 小技巧for(int i=2;i*i<=n;i++)可以试着了解一下

#include <iostream>
using namespace std;

int main() {
/*方法一*/
int n; //  需要判断的数字
for(int i=2; i*i<n; i++)    {
if(n%i ==0) {
cout<<"NO";  //不是素数
exit(0);   //发现不是素数 直接停止程序  不运行下去了
}
}
cout<<"YES";    //能运行到这里  是因为 上面的判断语句没有执行 也就是他是素数
/***********上面是方法一     只要判断 i*i <=N************/
/*因为任何一个数字 都是由一大一小 两个数字乘起来,又或者是两个相等的数字相乘*/


/******下面方法二***/
int n; //  需要判断的数字
for(int i=2; i<n; i++)    {
if(n%i ==0) {
cout<<"NO";  //不是素数   直接break跳出循环  这样最后一次i  不进行累加
break;
}
}
if(i==n)  cout<<"YES";  //若上面for循环中 if 语句不执行   那么i的累加一直进行 最后i==n的时候跳出循环
//所以这里判断 i==n
return 0;
}

第3个回答  2018-07-09
解释:
只能被1和本身整除叫素数,反之在1和本身中有约数则不是素数,终止循环,返回错误指示参数 0 即可;
算法:
用 n 对 2 到 n-1 之间的所有自然数求余 即可;
1)余数为 0,代表能整除,不是素数;
2)如果循环到最后则返回 1,表明该数 是素数(该数只能被1和本身整除)
程序:
int isPrime(int n)
{ int i;
for (i = 2; i < n; ++i) {
if (n % i == 0) return 0; //不是素数
}
return 1; //是素数
}
第4个回答  2018-08-05
判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。详细代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
printf("Please enter an indefinite number.\n");
int num;
scanf("%d",&num);
for(int i=2;i<=(int)sqrt(num);i++)
if(num%i==0)
{
printf("It isn't a prime number.\n");
return 0;
}
printf("It is a prime number.\n");
return 0;
}
第5个回答  2018-07-05

运行结果:

源码:

#include<stdio.h>
#include<math.h>
int prime(int x)
{
int i, k;
if (x<2)
return(0);
k = sqrt((double)x);
for (i = 2; i <= k; i++)
{
if (x%i == 0)
break;
}
if (i>k)
return(1);
else 
return(0);
}
int  main()
{

int iNumber = 0;
while (1)
{
printf("请输入一个数字:");
scanf("%d", &iNumber);
if (prime(iNumber) == 1)
printf("是素数\n");
else
printf("不是素数\n");
getchar();
}
printf("C/C++学习乐园:\n")
printf("747821062\n")
return 0;
}

总结:使用子函数判断是否是素数,如果返回0 不是素数,如果是1 是素数

相似回答