【NOI】C++函数入门一(sqrt函数)


前言

在 C++ 编程语言中,sqrt 函数是一个非常有用的数学工具,它用于计算非负数的平方根。平方根的概念是平方运算的逆运算,即如果一个数的平方等于另一个数,则这个数是那个数的平方根。

学习路线:C++从入门到NOI学习路线

学习大纲:C++全国青少年信息学奥林匹克竞赛(NOI)入门级-大纲


一、sqrt 函数

1.导入

相信大家都学过“平方“了。什么!你不知道?

平方,也称为二次方,是一种乘方运算,比如,a的平方表示a×a,简写成a²,例如4×4=16,8×8=64。

那平方和sqrt 函数有什么联系呢?

在 C++ 中,sqrt 函数用于计算一个非负数的平方根。而平方的逆运算就是开平方,也叫做求平方根。你可以用乘除来理解他们的关系。

2.使用方法

sqrt 函数,它定义在 < cmath > 头文件中,因此使用前需要包含 头文件,并使用 std:: 前缀(除非你使用了 using namespace std; 声明)。

示例:

#include <iostream>  
#include <cmath> // 包含 sqrt 函数的头文件  
using namespace std;
int main() {
     
    double number = 16.0;  
    double root = sqrt(number);  
  
    cout << "这个数的平方根是 "  << root << endl;  
    
    return 0;  
}

sqrt 函数接受一个非负浮点数(double、float 或 long double 类型)作为参数,并返回该数的平方根,结果也是浮点数类型,具体类型与输入参数的类型相同。

3.i<=sqrt(n) 和 i*i<=n

首先解释一下i*i<=t和i<=sqrt(t)是什么意思。

sqrt函数除了直接求某个数的平方根以外,在求解素数,以及其他问题中也会使用到,具体做法就是作为循环次数的上限。

在这里插入图片描述

问题:1023. 判断素数

类型:函数,sqrt函数入门


题目描述:

任意输入一个整数,判断它是否为素数。是的话输出 T ,不是的话输出 F。

质数又称素数,质数定义为在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数。

输入:

输入只有一行,包括 1 个整数。( 1≤n≤10^9 )

输出:

输出只有一行。

样例1:

输入:

57

输出:

F

样例2:

输入:

7

输出:

T

看到这个问题,你会怎么解决呢?

质数定义为在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数。

那我们首先想到的就是从定义入手。

解法一:从2~n-1,找n的因子,如果n没有因子,且n>1就是素数。
#include<bits/stdc++.h>
using namespace std;
int main(){
   
	//一、分析问题
	//已知:一个整数n ; 
	//未知:求n是否是素数;是的话输出 T ,不是的话输出 F。 
	//关系:	质数又称素数,质数定义为在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数。
	//二、定义变量(已知、未知、关系) 
	int n,c=0;
	//三、输入已知
	cin>>n;
	//四、根据关系计算
	for(int i=2;i<n;i++){
   
		if(n%i==0) ++c;
	}
	//五、输出未知 
	if(c==0&&n>1){
   
		cout<<"T";
	}else{
   
		cout<<"F";
	}
	
	return 0;
} 

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

样例2运行结果:

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

我们可以看到虽然程序能够正确的找出素数,但是如果n很大,提交之后,时间超限!!!!!!

既然逻辑没问题,我们就要解决数据范围。思路如下:

  1. 一个整数n的因子,可以在2~n/2范围内查找;
  2. 如果n找到因子,就可以停止循环;
解法二:优化程序,减少循环次数。
#include<bits/stdc++.h>
using namespace std;
int main(){
   
	//一、分析问题
	//已知:一个整数n ; 
	//未知:求n是否是素数;是的话输出 T ,不是的话输出 F。 
	//关系:	质数又称素数,质数定义为在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数。
	//二、定义变量(已知、未知、关系) 
	int n,c=0;
	//三、输入已知
	cin>>n;
	//四、根据关系计算
	for(int i=2;i<=n/2;i++){
   
		if(n%i==0) {
   
			++c;
			break;
		}
	}
	//五、输出未知 
	if(c==0&&n>1){
   
		cout<<"T";
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月别枝惊鹊丶

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值