2 solutions

  • 0
    @ 2022-1-20 22:55:01
    #include<iostream>
    using namespace std;
    int main(){
        int n,ans=0;
        cin>>n;
        for(ll i=1;i<n;i++){
            if((i*i)%n<n/2)ans++;
        }
        cout<<ans;
        return 0;
    }
    
    • 0
      @ 2022-1-20 22:38:58

      题目来源

      2021年蓝桥省赛第二场G题

      题目链接:http://acm.mangata.ltd/p/P1164

      考点

      暴力枚举

      视频讲解

      视频连接:https://www.bilibili.com/video/BV11q4y1k7Dm/

      思路

      我们只需要从1枚举到n-1,你然后在枚举的过程中计算一下当前位置的平方,然后再对n取模,如果余数是小于n的一半那么我们就记录下来,否则我们就不记录,最后输出我们记录的个数即可

      代码

      #include<bits/stdc++.h>
      using namespace std;
      //----------------自定义部分----------------
      #define ll long long
      #define mod 1000000009
      #define endl "\n"
      #define PII pair<int,int>
      
      int dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};
      
      ll ksm(ll a,ll b) {
      	ll ans = 1;
      	for(;b;b>>=1LL) {
      		if(b & 1) ans = ans * a % mod;
      		a = a * a % mod;
      	}
      	return ans;
      }
      
      ll lowbit(ll x){return -x & x;}
      
      const int N = 2e6+10;
      //----------------自定义部分----------------
      int n,m,q,a[N];
      
      int main()
      {
      	cin>>n;
      	int ans = 0;
      	for(int i = 1;i < n ; ++i) {
      		int x = (i * i % n) * 2;
      		if(x < n) ans++;
      	}
      	cout<<ans<<endl;
      	
      	return 0;
      }
      
      • 1

      Information

      ID
      188
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      2
      Tags
      # Submissions
      184
      Accepted
      118
      Uploaded By