思路

先用一个变量ans存储答案,然后从1 到 n − 1 枚举,对于一个数x,如果存在x平方后除以n的余数小于 n 的一半则 ans++


题目存在的一些坑

  1. 根据题目的意思n的一半有可能为浮点数,所以将n/2n/2的结果转化为浮点类型
  2. 补充知识:C/C++及Java中当除法除不尽时会向0取整,而Python3中用 / 除不尽时会有小数,而用 // 会向下取整 比如C/C++中3/2=1-3/2=-13/2=13/2=1,python3中3/2=1.5-3/2=-1.53//2=2-3//2=-2
  3. 当n为1时,没有满足条件的数

一些细节

  1. 题目不会爆int,开int类型的变量足够
  2. 时间复杂度:O(n)O(n)

参考代码

#include<iostream>
using namespace std;
int main()
{
	int n, ans = 0;
	cin >> n;
	double x = n / 2.0;

	for(int i = 1; i < n; i++)
		if((i * i % n) < x)
			ans++;
			
	cout << ans << endl;
	return 0;
}

1 条评论

  • @ 2022-12-1 19:52:20

    补充:所以就是因为除法存在误差所以推荐大家使用乘法来代替,如题目中 x平方后除以n的余数小于 n就可以两边同时*2

    👍 1
    • 1