素数怎么算

素数又称质数,素数只能被自己或者1整数。例如:1,3,5,7,11,13,17,19等都是素数,他们只能被自己本身和1整除,那么,我们怎么通过代码来计算出这个数是不是素数呢?

思路一:

比如,我们要判断17是不是素数,那么,我们就要想办法证明17不能被2~16之间的数字整数,一个都不行。即:在键盘上我们输入一个整数n,假设它是素数,那么它必须不能被 2~(n-1)给整数,如果其中一个能被n整除,那么,他就不是素数。

我们用代码来实现

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

思路二

不需要思路一那么麻烦,判别的次数有点多。只需要被2~√n 之间的每一个整数去除就ok了。如果n不能被2~√n 间任一一个整数整除,那么n必定是素数。例如:19不能被2~5之间的任一整数整除,可以判定19是素数

原因:因为如果n能被2~(n-1)之间某个数整除,其两个因子必定有一个小于或等于√n ,另一个大于等于√n 。

用代码来实现:

#include <stdio.h>
#include <math.h>
int main()
{
	int num = 0;//输入的数
	int i = 0;//用于循环
	int k = 0;//n的平方根
	printf("请输入一个整数:");
	scanf("%d", &num);
	//求平方根,注意sqrt的参数为double类型,所以要强制类型转换
	k = (int)sqrt((double)num);
	for (i = 2; i <= k; i++)
	{
		if (num % i == 0)
		{
			break;
		}
		//如果完成所有循环,那么num为素数
		//注意最后一次循环,会执行i++,此时i=k+1,所以有i>k
	}
	if (i > k)
	{
		printf("%d是素数", num);
	}
	else
	{
		printf("%d不是素数", num);
	}
	return 0;
}

c++版本

#include <iostream>
#include <cmath>
using namespace std;

bool is_Prime(int x)
{
    if(x < 2) return false;
    for(int i = 2; i <= sqrt(x); i++)
    {
        if(x % i == 0) return false;
    }
    return true;
}

int main()
{
    int n;
    scanf("%d",&n);
    for(int i = 0; i < n; i++)
    {
        int x;
        scanf("%d",&x);
        if(is_Prime(x))
            printf("Yes\n");
        else
            printf("No\n");
    }
    
    return 0;
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值