题目链接:https://www.cometoj.com/contest/34/problem/A?problem_id=1473
小象同学在初等教育时期遇到了一个复杂的数学题,题目是这样的:
【分析】官方题解:
当时表达式处理了一下,但是并没有发现些啥么...
如果n可以开方的话,则有 这时候就是有无穷多组解
如果n不可以开方,则展开,有
那么n一定是4的倍数;则z=n/4/y, x=y+n/4/y;
【代码】
#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const ll mod=1e9+7;
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int ans=0,cnt=0; int p=sqrt(n);if(p*p==n)puts("infty");else if(n%4!=0)puts("0 0");else{n/=4;for(int y=1;(ll)y*y<=n;++y){if(n%y==0){cnt++;ans=(ans+((n/y+y)*ll(n))%mod)%mod;}}printf("%d %d\n",cnt,ans);}}
}