小平方
CYY

题目来源

www.acwing.com/problem/content/34/


题目

小蓝发现,对于一个正整数 n 和一个小于 n 的正整数 v,将 v 平方后对 n 取余可能小于 n 的一半,也可能大于等于 n 的一半。

请问,在 1 到 n−1 中,有多少个数平方后除以 n 的余数小于 n 的一半。

例如,当 n=4 时,1,2,3 的平方除以 4 的余数都小于 4 的一半。

又如,当 n=5 时,1,4 的平方除以 5 的余数都是 1,小于 5 的一半。

而 2,3 的平方除以 5 的余数都是 4,大于等于 5 的一半。


输入格式

输入一行包含一个整数 n。


输出格式

输出一个整数,表示满足条件的数的数量。


数据范围

1≤n≤10000


输入样例

1
5

输出样例

1
2

AC代码

虽然是水题但是有一点需要注意,(n_n)%m<(m/2)会造成错误,比如(2_2)%9<(9/2)结果为false,应该改为(n_n)%m<(m/2.0)或者(n_n)%m*2<m.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
int m = n;
int count = 0;
while(--n){
//虽然是水题但是有一点需要注意,(n*n)%m<(m/2)会造成错误
//比如(2*2)%9<(9/2)结果为false
//应该改为(n*n)%m<(m/2.0)或者(n*n)%m*2<m
if((n*n)%m<(m/2.0)) count++;
}
cout<<count<<endl;
return 0;
}
 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep