问题描述
小蓝发现, 对于一个正整数 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 。
输出格式
输出一个整数, 表示满足条件的数的数量。
样例输入
5
样例输出
2
评测用例规模与约定
对于所有评测用例, 1≤n≤10000 。
运行限制
最大运行时间:1s
最大运行内存: 256M
代码:
double num = (double)n / 2;
要特别注意这里,因为是一半,而n是int类型,需要强转,否则会精度损失
import java.util.Scanner;
public class 小平方 {
static int n;
static int count = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
for (int i = 1; i < n; i++) {
f(i);
}
System.out.println(count);
}
private static void f(int i) {
double num = (double)n / 2;
if ((i * i) % n < num) {
count++;
}
}
}