C语言之素数判断及输出(1~100所有的素数)

C语言之素数判断及输出

我们要想解决素数问题首先要明确素数是什么。

什么是素数

素数:素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数(来自百度词条)。

如何计算素数

当一个数本身除了1和它本身以外不再有其他因数时为素数。
1):因此判断一个整数num是否为素数,只需用 2 ~ num-1 (因为所有整数都能被1整除)之间的每一个整数去除num,如果都不能被整除,那么 num即一个素数。
用C语言语句表示为:

//如判断数num是否为素数
flag = 0;
for(int i=2;i<num;i++)
{
	if(num%i==0)
	flag = 1;
}
    if{flag == 0}
     { //是素数 }
    else
    { //不是素数 }

这里循环可以继续做一下优化减少不必要的运算
2):num不必被 2 ~ num-1 之间的每一个整数去除,只需被 2 ~ √num之间的每一个整数去除就可以了。如果 num不能被 2 ~ √num之间任一整数整除,num 一定是素数。

// An highlighted block
flag = 0;
for(int i=2;i<=sqrt(num);i++)
{
	if(num%i==0)
	flag = 1;
}
    if{flag == 0}
     { //是素数 }
    else
    { //不是素数 }

这里需要用到sqrt函数,在c语言<math.h>(数学库)中直接调用即可
这里需要用到sqrt函数(求平方根),在c语言<math.h>(数学库)中直接调用即可.

素数源代码

(1)素数判断

// **判断num是否为素数**
#include<stdio.h>
#include<windows.h>
#include <math.h>
#pragma warning(disable:4996)   //vs(vs2013)使用scanf时需要加 _s 否则会报错,用这种是解决方法之一

int main()
{
	int num, i;
	int flag=0;              //判断标志
	scanf("%d", &num);  //输入要判断的整数num
	if (num == 0){
		flag = 1;
	}
	for (i = 2; i <= sqrt(num); i++)
	{
		if (num%i == 0){
			flag = 1; 
			break;
		}
    }
	if (flag == 0){
		printf("%d是素数。\n",num);
	}
	else{
		printf("%d不是素数。\n", num);
	}
	system("pause");   //vs运行会直接结束运行窗口自动关闭,可以用<window.h>中的syetem函数使运行窗口保留。 
	return 0;
}

(2)输出1~100所有的素数

// **找出1~100中所有素数**
#include<stdio.h>
#include<Windows.h>
#include <math.h>

int main()
{
	int i = 2,flag=0;
	for (; i <= 100; i++)
	{
		flag = 0;
		int j = 2;
		for (; j <=sqrt(i); j++){
			if (i % j == 0){
				flag++;
				break;
			}
		}
		if (flag == 0){
			printf("%d  ", i);
		}
		
	}
	printf("是素数。\n");
	system("pause");   //vs运行会直接结束运行窗口自动关闭,可以用<window.h>中的system函数使运行窗口保留。 
	return 0;
}

运行结果:
在这里插入图片描述

进阶:因子分解

链接:因子分解
来源:牛客网
在这里插入图片描述

#include <iostream>
#include <cmath>
using namespace std;
// 求最小素因子集合
void factorization(int n){
    cout << n << " = ";
    for(int i = 2; i <= sqrt(n); ++i){
        while(n % i == 0 && i < n){
            cout << i << " * ";
            n /= i;
        }
    }
    cout << n ;    //这个时候最后一个因素i刚好等于n
}

int main()
{
    int num;
    while(cin >> num){
        factorization(num);
        cout << endl;
    }
    return 0;
}






代码都是自己写的,如有不对欢迎指正【抱拳】。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论 14

打赏作者

-YIN

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值