C语言编程判断输入的正整数是否为素数。

C语言编程判断输入的正整数是否为素数。,第1张

将:for(k=2;k<=x[i]-1;k++)改成:for(g=0,k=2;k<=x[i]-1;k++)主要是在这个for循环前令g=0。

因为输入的不止一个数,开头的初始化g=0,在第一个数的时候就可能已经被改了。后面的数不重新初始化g=0,就不能保证对了。

判断一个正整数n是不是素数的思路:

思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
思路2):另外判断方法还可以简化。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 之间有无因子即可。

正确代码如下:

#include<mathh>/sqrt/

#include<stdioh>/scanf,printf,system/

int isPrime(int n)//判断n是否为素数,如果是则返回1,否则返回0。

{

if(n<=1)return 0;//小于等于1直接退出。

int i;

for(i = 2; i <= (int)sqrt(n); i ++)//从2到算术平方根遍历。

if(!(n%i)) return 0;//存在约数,不是素数,返回0。

return 1;//不存在约数,返回1,表示为素数。

}

main ()

{

int num;

scanf ("%d", &num);

if ( isPrime( num) )//num是素数。

printf ("%d is a prime",num);

else

printf ("%d isn't a prime",num);//num不是素数。

system("PAUSE");//暂停界面。

return 0;

}

扩展资料:


输入一个正整数或0,判断是否为质数

#include "stdioh"

int main()

{

while(1)

{

int n,flag,i;

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

scanf("%d",&n);

flag = n/2+1;

if(n==0||n==1)

printf("%d既不是质数也不是合数\n",n);

else if(n==2)

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

else

{

for(i=2;i<=flag;i++)

{

if((n%i)==0)

{

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

break;

}

if(i==flag&&(n%i)!=0)

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

}


}

}

#include <stdioh>
void main()
{
int n,half;
printf("请输入一个整数n:");
scanf("%d",&n);
half=n/2;
for(int i=2;i<=half;i++)
if(n%i==0)
{
printf("该数不是素数");
break;
}
if(i>half)
printf("该数是素数");
}
(我在VC上编的,自己运行过,希望对你有用^_^)

判断一个数是否是质数在于看这个数字是否只能被1和它本身所整除的整数。但是有一个例外,1不属于质数。

c语言中的质数:

数学的概念中,素数就是只能被1和它本身所整除的整数。但是有一个例外,就是1不属于素数。所以你在输入一个整数并加以判断的时候就需要考虑这种情况了。如下即可:

while(scanf("%lu", &num) == 1 && num != 1)

1

这里用到了while循环来判断输入的数值并加以判断,如果输入格式正确的话会返回一个1并将输入的数值存入num这个变量中,然后再判断num的值是否为1。

在这里有一条很好用的规则用于素数的判断:测试的数只需要界于2到num的平方根之间的所有数,看它们是否可以整除num。如果可以整除,说明输入的数不是素数;反之,说明输入的数是素数。

到这里,就会有人说平方根怎么求,其实这个很好解决。你完全可以像下面这样描述判断条件:

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

if(num % div == 0){

if((div div) != num){

printf("%lu is divisible by %lu and %lu\n", num, div, num / div);

}else {

printf("%lu is divisible by %lu\n", num, div);

在这里,在if条件语句里面还嵌套了一个if条件语句,用来判断两个约数是否是一样的,比如144,约数是12和12,这时候就只需要打印一个约数即可。

第二,我们怎样知道一个数数素数呢?

如果num是素数,程序流程永远也进不了if语句中。为了解决这个问题,可以在循环外设置一个变量为某一值,比方说1,在if语句中将这个变量重设为0。那么,循环完成后,可以检查该变量是否仍然是1。如果是,则从没进入过if语句,这个数是素数。我这里用int类型的变量isPrime来当作一个标志实现这个想法。

好了,结合上面的所有想法,我们开始写代码了:

#include<stdioh>

int main(void)

unsigned long num;// 要检查的数

unsigned long div;// 可能的约数

int isPrime;// 素数的标志,1代表是素数,0代表不是素数

printf("Please enter an integer for analysis ");

printf("Enter q to quit\n");

while(scanf("%lu", &num) == 1 && num != 1)

for(div = 2, isPrime = 1;(div div) <= num; div++){

if(num % div == 0){// 如果能被div整除

if((div div) != num){// 约数不相等

printf("%lu is divisible by %lu and %lu\n", num, div, num / div);

}else{// 约数相同

printf("%lu is divisible by %lu\n", num, div);

// 将isPrime设置为0,表示其不是一个素数

isPrime = 0;

if(isPrime == 1){

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

printf("Please enter another integer for analysis ");

printf("Enter q to quit\n");

printf("Bye\n");

return 0;

这里有一个关键就是,在for循环控制表达式中使用了逗号运算符,以针对每个新输入的数将isPrime初始化为1。

素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如29就是素数,因为它不能被 2~28 的任一整数整除。

方法一:判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。

方法二:另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~  之间的每一个整数去除就可以了。如果 m 不能被 2 ~  间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。

1、首先打开CodeBlocks,创建一个新项目。

2、项目语言,选择“c”, 我们将项目名称命名为“primeNumber”。

3、然后下一步点击“finish”。

4、创建好项目后,我们打开 “mainc”文件。

5、素数即质数,也就是除了1和它本身以外不再有其他因数,首先是实现输入口。

6、输入口完成后,接下来就是判断素数。 要判断素数,我们要从它的特点开始找。素数的因子 只有1和它本身。那么,就是说,我们可以通过找到这个数的所有因数,进行比对即可。

7、先定义好相关的变量,这里result是用来存储因子之和的,用循环,遍历所有可能因子。

其中 if判断,i是不是prime的因数。 %是求余数的运算符。当能被整除时,结果为0。

8、执行完for循环后,result中存入的就是 prime的因数之和,其中也包括它本身。接下来只要判断 prime+1 是否与result相等。如果相等,就表示result中是1+数本身,即为素数。


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

原文地址:https://54852.com/yw/10328920.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存