链接:https://ac.nowcoder.com/acm/contest/3003/E
来源:牛客网
题目描述
这一天,牛牛与 牛魔王相遇了――然而这并不在 牛牛期望之中。 牛魔王不出意料又给 牛牛一道看似很难的题目:求有多少个不同的正整数三元组 ((i,j,k) 满足 i+j=sqrt( i)+sqrt( j)=sqrt (k) ,且 i×j≤n。 牛牛并不会做,你能略施援手吗? 当两个三元组 (i1,j1,k1),(i2,j2,k2)满足 i1≠i2 或 j1≠j2 或 k1≠k2 时它们被认为是不同的。
输入描述:
第一行,一个正整数 n。保证 1≤n≤4×10^7
输出描述:
输出一行,一个整数表示答案
哎,看得懂题意的话很好做,就是就n以内所有平方数的因子数
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int num(ll n){
int count=2;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
if(i==sqrt(n) && n/i==i){
count++;
}
else count+=2;
}
}
return count;
}
int main()
{
ll n,res=0;
cin>>n;
for(int i=1;i*i<=n;i++)
{
res+=num(i*i);
}
cout<<res-1<<endl;
}