题目描述

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

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

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

又如,当 �=5n=5 时, 11,44 的平方除以 55 的余数都是 11,小于 55 的一半。而 22,33 的平方除以 55 的余数都是 44, 大于等于 55 的一半。

输入格式

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

输出格式

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

代码如下:

#include<bits/stdc++.h>
#define int long long
#define LL_int 128
using namespace std;
int n;
signed main(){
    std::ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n;
    int ans=0;
    for(int i=1;i<n;i++){
        int a;
        a=(i*i)%n;
        if(a<(n/2.0)){
            ans++;
        }
    }
    cout<<ans;
    return 0;
}

切记:此题处处为坑,第14行中的2.0必须为2.0不可为2,如果写2会自动向下取整,洛谷提交后仅获得60分。

03-25 10:14