洛谷 B4553:[GESP202606 二级] 完全平方数计数
【题目来源】https://www.luogu.com.cn/problem/B4553【题目描述】小杨同学正在研究完全平方数。平方 一个数的平方等于这个数乘以这个数本身。完全平方数 指可以恰好表示为某个正整数的平方的数。例如9 是完全平方数因为 93×3但 27 不是因为 27 不能表示为任何正整数的平方。给定两个正整数 l 和 r保证 l≤r小杨同学想知道 l 到 r 之间的所有正整数中包含 l 和 r有多少个数是完全平方数。【输入格式】输入两行第一行为一个正整数 l第二行为一个正整数 r。【输出格式】输出一个非负整数表示 l 到 r 中有多少个正整数是完全平方数。如果 l 到 r 中没有完全平方数则输出 0。【输入样例】121【输出样例】4【数据范围】1≤l≤r≤2000。【算法分析】● 当 ri 极大如10^12时有如下优化代码。算法原理很简单令 a floor(sqrt(le-1))表示小于 le的最大完全平方数的平方根。令 b floor(sqrt(ri))表示不大于 ri的最大完全平方数的平方根。则区间内的完全平方数个数 b - a。#include bits/stdc.h using namespace std; typedef long long LL; LL le,ri,ans; int main() { cinleri; lesqrt(le-1); risqrt(ri); coutri-leendl; return 0; } /* in: 1 21 out: 4 */【算法代码】#include bits/stdc.h using namespace std; int main() { int ans0,le,ri; cinleri; for(int i1; i*iri; i) { if(i*ile) ans; } coutansendl; return 0; } /* in: 1 21 out: 4 */【参考文献】https://gesp.ccf.org.cn/101/attach/1753295276212256.pdf