Squares(arc125)

Squares

https://atcoder.jp/contests/arc125/tasks/arc125_b

题意:

给定一个n,找一对x,y满足以下条件:

​ 1≤x,y≤N;

​ x^2-y是个完全平方数(可以是0);

找出有多少对x,y满足条件;

N<=1e12;

思路:

假设最后的完全平方数为z,则x2-y=z2;

x2-z2=y;(x+z)*(x-z)=y;

设p=(x+z),q=(x-z);

则p>=q,pq=y;

1<=x=(p+q)/2<=N;

1<=y=pq<=N;

所以:pq<=N;(p+q)/2<=N;则q<=根号n;并且p和q的奇偶性是一样的;

所以去枚举q即可;

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
signed main() {
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int n;
    cin>>n;
    int k=sqrt(n);
    int ans=0;
    for(int q=1;q<=k;q++){//枚举q 
    	int p=n/q;//计算p的最大值; 
    	ans=(ans+(p-q)/2+1)%mod;//因为p和q奇偶性一样,通过(p-q)/2+1计算可得; 
	}
	cout<<ans<<endl;
    return 0; 
}
上一篇:leetcode1102 得分最高的路径


下一篇:【Codeforces Global Round 14】-C. Phoenix and Towers-堆模拟