精华内容
下载资源
问答
  • 2019-08-17 10:35:45

    C语言判断素数的两种方法

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

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

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

    原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 ,另一个大于或等于 。例如 16 能被 2、4、8 整除,16=28,2 小于 4,8 大于 4,16=44,4=√16,因此只需判定在 2~4 之间有无因子即可。

    两种思路的代码请看解析。

    思路1) 的代码:

    #include <stdio.h>
    
    int main(){
        int a=0;  // 素数的个数
        int num=0;  // 输入的整数
    
        printf("输入一个整数:");
        scanf("%d",&num);
    
        for(int i=2;i<num;i++){
            if(num%i==0){
                a++;  // 素数个数加1
            }
        }
    
        if(a==0){
            printf("%d是素数。\n", num);
        }else{
            printf("%d不是素数。\n", num);
        }
    
        return 0;
    }
    

    思路2) 的代码

    #include <stdio.h>
    #include <math.h>
    void main(){
        int m;  // 输入的整数 
        int i;  // 循环次数
        int k;  // m 的平方根 
    
        printf("输入一个整数:");
        scanf("%d",&m);
    
        // 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型 
        k=(int)sqrt( (double)m );
        for(i=2;i<=k;i++)
            if(m%i==0)
                break;
    
        // 如果完成所有循环,那么m为素数
        // 注意最后一次循环,会执行i++,此时 i=k+1,所以有i>k 
        if(i>k)
            printf("%d是素数。\n",m);
        else
            printf("%d不是素数。\n",m);
    
        return 0;
    }
    
    更多相关内容
  • C语言判断素数

    2012-08-09 15:12:58
    使用C语言实现判断一个数是否为素数,程序简单好用
  • C语言判断素数的几种方法

    千次阅读 2022-02-10 14:27:21
    C语言判断素数的几种方法

            素数的定义:只能被常数1或自己整除,不能被其他整数整除的正整数。

    1.从2——x-1循环

    #include<stdio.h>
    int main()
    {
    	int x;
    	int IsPrime = 1;     //定义变量IsPrime并赋初值1 即x为素数
    	scanf_s("%d", &x);
    	for (int i = 2; i < x; i++)
    	{
    		if (x % i == 0)
    		{
    			IsPrime = 0;
    			break;
    		}
    	}
    	if (IsPrime == 0)
    		printf("%d is not a prime number", x);
    	else
    		printf("%d is a prime number", x);
    	
    	return 0;
    }

    测试结果:

    23
    23 is a prime number

            需要注意的是定义的变量IsPrime赋初值为1;其次是for循环中i是从2开始增加。另外加一句:break;与continue;的区别在于:程序执行到break;语句时,会跳出当前循环即结束当前循环;而continue;是不再执行当前循环内continue;语句之后的部分。

            拓展:利用循环嵌套输出n以内的素数

    #include<stdio.h>
    int main()
    {
    	int n;
    	int count=0;
    	int i,j;
    	scanf_s("%d",&n);
    	for(i=1;i<=n;i++)
    	{
    		int IsPrime=1;
    		for( j=2;j<n;j++)
    		{
    			if(i%j==0)
    			IsPrime=0;
    			break;
    		}
    		if (IsPrime == 1)
    		{
    			printf("%d\t", i);
    			count++;
    			if (count % 5 == 0)    //每5个输出做一行
    				printf("\n");
    		}
    		
    	}
    	return 0;
    }

    测试结果:

    50
    1        3        5        7        9
    11      13      15      17      19
    21      23      25      27      29
    31      33      35      37      39
    41      43      45      47      49

    2.除去偶数之后,3——x-1,每次加2

            定义一个判断是否为素数的函数

    int IsPrime(int x)
    {
        int ret=1;      //ret含义与之前的变量IsPrime相同
        if(x==1||(x!=2&&x%2==0))
            ret=0;
        for(int i=3;i<x;i+=2)
        {
            if(x%i==0)
            {
                ret=0;
                break;
            }    
        }
        return ret;
    }

    3.通过sqrt()函数

    int IsPrime(int x)
    {
        int ret=1;      //ret含义与之前的变量IsPrime相同
        if(x==1||(x!=2&&x%2==0))
            ret=0;
        for(int i=3;i<sqrt(x);i+=2)       //循环到sqrt(x)
        {
            if(x%i==0)
            {
                ret=0;
                break;
            }    
        }
        return ret;
    }
    //使用sqrt()函数需要包含头文件<math.h>

      4.通过判断是否能被已经判断过的并且<x的素数整除,利用数组

    #include<stdio.h>
    #define N 50
    int IsPrime(int x, int known[], int number);
    int main()
    {
    	int i = 3;
    	int count = 1;
    	int array[N]={2};
    	while (count < N)
    	{
    		if (IsPrime(i, array, count))
    			array[count++] = i;
    		i++;
    
    	}
    	for (i = 0; i < N; i++)
    	{
    		printf("%d", array[i]);
    		if ((i + 1) % 5 == 0)
    			printf("\n");
    		else
    			printf("\t");
    	}
    	return 0;
    }
    int IsPrime(int x, int known[], int number)
    {
    	int ret = 1;
    	int i;
    	for ( i = 0; i < number; i++)
    	{
    		if (x % known[i] == 0)
    		{
    			ret = 0;
    			break;
    		}
    	}
    	return ret;
    }

    测试结果:

     2        3         5         7         11

    13       17       19       23       29
    31       37       41       43       47
    53       59       61       67       71
    73       79       83       89       97
    101     103     107     109     113
    127     131     137     139     149
    151     157     163     167     173
    179     181     191     193     197
    199     211     223     227     229

            以上便是几种判断素数的方法

    展开全文
  • c语言判断素数

    2012-10-10 10:16:39
    这是一个c语言判断素数的问题 我自己也研究了 。
  • C语言判断素数(求素数)

    万次阅读 多人点赞 2020-10-30 11:27:24
    C语言判断素数(求素数) 素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。 思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ ...

    C语言判断素数(求素数)

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

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

    思路2):判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~  之间的每一个整数去除就可以了。如果 m 不能被 2 ~  间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。
        原因:因为如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于 ,另一个大于或等于 。例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=√16,因此只需判定在 2~4 之间有无因子即可。

    思路1实现:

    #include <stdio.h>
    int main() {
    	int n;
    	printf("请输入一个1-100之间的整数:\n");
    	scanf("%d", &n);
    
    
    	int m = 0;
    	for (int i = 2; i < n; i++ ) {
    		if(n % i  == 0) {
    			m++;
    		}
    	}
    	if (m == 0) {
    		printf("%d是素数\n", n);
    	} else {
    		printf("%d不是素数\n", n);
    	}
    
    	return 0;
    }

    思路2实现:

    #include <stdio.h>
    #include <math.h>
    int main() {
    	int n;
    	printf("请输入一个1-100之间的整数:\n");
    	scanf("%d", &n);
    
    
    	int i = 0;
    	int q = sqrt(n);
    	for (i = 2; i <= q; i++ ) {
    		if(n % i  == 0) {
    			break;
    		}
    	}
    	if (i > q) {
    		printf("%d是素数\n", n);
    	} else {
    		printf("%d不是素数\n", n);
    	}
    
    	return 0;
    }

     

    《C与指针》4.14 - 2:

    打印1~100之间所有质数:

    #include <stdio.h>
    int main() {
    	int num, divisor;
    	printf("1, 2");
    	for (num = 3; num <= 100; num += 2) {
    		for(divisor = 3; divisor < num; divisor +=2 ) {
    			if (num % divisor == 0) {
    				break;
    			}
    		}
    
    		if(divisor >= num) {
    			printf(", %d", num);
    		}
    	}
    	printf("\n");
    	return 0;
    }

    结果:

    1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
    

     

    展开全文
  • C语言判断素数(两种方法)

    万次阅读 多人点赞 2020-07-07 09:09:23
    思路1:判断一个数是否为素数,只需把m被2~m-1之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。 思路2:另外判断方法可以简化,m只需被2~√m之间的每一个整数去除就可以了,如果m不能被2-√m之间的每个...

    素数又称质数,是指除了1和它本身外,不能被其他任何整数整除的数,例如17就是素数,因为它不能被2~16任意整数整除。

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

    两种思路的代码如下
    思路1的代码:

    #include<stdio.h>
    int main()
    {
    	int a=0;//判断p的因子个数
    	int p;
    	int	i;
    	scanf("%d",&p);
    	for(i=2;i<p;i++)
    	{
    		if(p%i==0)
    			a++;
    	}
    	if(a==0)
    		printf("%d is a prime\n",p);
    	else
    		printf("%d is not a prime\n",p);
    	return 0;
    }
    

    思路2的代码:

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	int p,i;//p是输入的整数,i是循环次数
    	int a=0;//因子个数
    	int m;
    	scanf("%d",&p);
    	m=(int)sqrt(p);
    	for(i=2;i<=m;i++)
    	{
    		if(p%m==0)
    			a++;
    	}
    	if(a==0)
    		printf("%d is a prime\n",p);
    	else
    		printf("%d is not a prime\n",p);
    	return 0;
    }
    

    思路2也可写成:

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	int p,i;
    	int m;
    	scanf("%d",&p);
    	m=(int)sqrt(p);
    	for(i=2;i<=m;i++)
    	{
    		if(p%m==0)
    			break;
    	}
    	//如果完成所有循环,那么p为素数
    	if(i>m)
    		printf("%d is a prime\n",p);
    	else
    		printf("%d is not a prime\n",p);
    	return 0;
    }
    

    测试的数据如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • C语言 判断素数

    2021-03-25 23:32:44
    素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何 整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除。 #include <stdio.h> void main(){ int a=0,i; // 素数的个数 int num=0; /...
  • 判断素数算法C语言判断素数算法完整源码(定义,实现,main函数测试) C语言判断素数算法完整源码(定义,实现,main函数测试) #include <assert.h> #include <math.h> #include <stdbool.h> #...
  • C语言判断素数的四种方法 判断素数(质数)
  • c语言判断素数代码

    万次阅读 多人点赞 2018-04-06 23:18:05
    用算法计算素数一.学习素数之前,先考虑几个最基本的问题:1.什么是素数:2.合数是什么:3.数字中有没有特殊的数字:4.查找素数素数,都运用了那些算法:二.让我们思考一下:1.素数:除了1和本身外无法被其他...
  • c语言判断素数(质数)

    万次阅读 多人点赞 2020-12-20 20:31:42
    一、输入一个正整数并判断它是否为素数 1.素数是指大于1且只能被1和它本身整除的正整数,2是最小素数素数有无穷个; 2.如果整数x大于2,那么就判断x对2~(x-1)取余是否为0,如果是,肯定不是素数,如果都不是,则...
  • 主要介绍了使用c语言判断100以内素数的示例(c语言求素数),需要的朋友可以参考下
  • C语言判断素数求素数两种方法 素数又称质数所谓素数是指除了 1 和它本身以外不能被任何整数整除的数例如17就是素数因为它不能被 2~16 的任一整数整除 思路1)因此判断一个整数m是否是素数只需把 m 被 2 ~ m-1 之间的...
  • C语言判断素数,判断质素算法

    千次阅读 2020-12-04 00:54:53
    1、判断一个数是否为质数 思路:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。所以从2开始进行求余,在小于自然数本身数字里没有一个数字进行求余数为0的,则证明输入的自然数是质数,否则...
  • 例一、已知m是一个大于1的正整数,编程序判断m是否为素数。 编程思路: 1、要判断m是否为素数,只需要检测m是否能被2到m-1之间的整数整除。 2、判断思路(1) 如果m不能被2整除;(例如m=7) m也不能被3整除; 。。...
  • 这是一个C语言 while 循环的示例:判断一个整数 n(n>1)是否为素数(也成质数)。问题分析输入:一个整数n(n>1)。输出:Yes or No。如果一个整数 n(n>1)不能被 1 或 n 以外的正整数整除,那么 n 就是素数。...
  • 代码如下:#include bool isPrimeNum(int x){ if (x == 1) return false; else if (x <= 0) return false; else if (x == 2) return true; else { for (int i = 2; i < x; i++) { if (x%i == 0) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,736
精华内容 6,294
关键字:

c语言判断素数

友情链接: dLinkList.zip