链接:https://ac.nowcoder.com/acm/contest/3003/E
来源:牛客网
题目描述
这一天,牛牛与 牛魔王相遇了――然而这并不在 牛牛期望之中。
牛魔王不出意料又给 牛牛一道看似很难的题目:求有多少个不同的正整数三元组 (i,j,k)满足√i+√j=√k
牛魔王不出意料又给 牛牛一道看似很难的题目:求有多少个不同的正整数三元组 (i,j,k)满足√i+√j=√k
牛牛并不会做,你能略施援手吗?
当两个三元组 (i1,j1,k1),(i2,j2,k2) 满足 i1≠i2 或 j1≠j2 或 k1≠k2 时它们被认为是不同的。
输入描述:
第一行,一个正整数 n。
保证 1≤n≤4×107。
输出描述:
输出一行,一个整数表示答案。
输入
1
输出
1
说明
(1,1,4)
1 #include <stdio.h> 2 #include <string.h> 3 #include <iostream> 4 #include <string> 5 #include <math.h> 6 #include <algorithm> 7 #include <vector> 8 #include <stack> 9 #include <queue> 10 #include <set> 11 #include <map> 12 #include <sstream> 13 const int INF=0x3f3f3f3f; 14 typedef long long LL; 15 const int mod=1e9+7; 16 #define Bug cout<<"---------------------"<<endl 17 const int maxn=1e4+10; 18 using namespace std; 19 20 vector<int> vt; 21 22 int Solve(int n)//返回n的因子个数 23 { 24 int res = 1; 25 for (int i = 2; i * i <= n; i++) { 26 if (n % i == 0) { 27 int t = 0; 28 while (n % i == 0) { 29 n /= i; 30 t++; 31 } 32 res *= t + 1; 33 } 34 } 35 if (n > 1) 36 res *= 2; 37 return res; 38 } 39 40 int main() 41 { 42 #ifdef DEBUG 43 freopen("sample.txt","r",stdin); 44 #endif 45 46 int n; 47 scanf("%d",&n); 48 for(int i=1;i*i<=n;i++) 49 vt.push_back(i*i); 50 int ans=0; 51 for(int i=0;i<vt.size();i++) 52 ans+=Solve(vt[i]); 53 printf("%d ",ans); 54 55 return 0; 56 }
-