每日一道算法题之小平方
- 一、题目描述
- 二、思路
- 三、C++代码
一、题目描述
题目来源:洛谷
[蓝桥杯 2021 第二轮省赛 A 组 F 题(B 组 G 题)]
小平方小蓝发现,对于一个正整数 n 和一个小于 n 的正整数 v,将 v 平方后对 n 取余可能小于 n 的一半,也可能大于等于 n 的一半。请问,在 1 到 n−1 中, 有多少个数平方后除以 n 的余数小于 n 的一半。例如,当 n=4 时,1,2,3 的平方除以 4的余数都小于 4 的一半。
C++程序要求输入输出格式如下:
输入格式
输入一行包含一个整数 n 。
输出格式
输出一个整数,表示满足条件的数的数量。
二、思路
思路比较简单,但是上交代码发现并没有通过所有的评测,于是检查问题,发现对于n的一半的处理有问题,n/2是直接向下取整了,不符合题意所说的一半。
三、C++代码
#include<bits/stdc++.h>
using namespace std;// 小平方int main(){int n;cin>>n;int i=1;double half=n/2.0;int number=0;while(i<n){if((i*i%n)<half){number++;}i++;} cout<<number;}