文章目录
前言
在 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很大,提交之后,时间超限!!!!!!
既然逻辑没问题,我们就要解决数据范围。思路如下:
- 一个整数n的因子,可以在2~n/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";