思路:思维题
这道题问有多少个三元组 A*B+C=N,事实上,对于每一对A*B<N, 总存在一个整数C满足这个等式,所以我们只需要用A遍历一遍从1到N,找到对应的满足条件的B的个数,如果A*B==N那么就自减一即可,然后将答案累加起来即可。
#include<bits/stdc++.h>
#define endl "\n"
#define pb push_back()
#define fi first
#define se second
#define pii pair<int,int>
using namespace std;
const int N=1e6+5;
const int mod=99824353;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
typedef long long ll;
typedef unsigned long long ull;
typedef struct node{
}node;
void IOS(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
}
void solve(){
ll n,ans=0;
cin>>n;
for(int i=1;i<=n;++i){
int w=n/i;
ans+=w;
if(i*(n/i)==n){
ans--;
}
}
cout<<ans;
}
int main(){
IOS();
solve();
return 0;
}
该程序通过遍历A的值,计算满足A*B+C=N的三元组数量。对于每个A,找到相应的B值(B的最大值为n/i),累加计数,并在A和B相等时减少一次计数。最终输出累计的三元组数。
865

被折叠的 条评论
为什么被折叠?



