这道题通过简化方程可得,当n为平方数的时候,解为无穷,当%4不为0时为0 0;计算
但是要小心,这道题的代码要经过优化。一下为两种代码,一个tle,一个accept。
#include<iostream> #include<cmath> using namespace std; typedef long long ll; const ll mod=1e9+7; int main() { int t; ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>t; while(t--) { ll n; cin>>n; double k=sqrt(n); if(k==(int)k) { cout<<"infty"<<endl; continue; } if(n%4!=0){ cout<<0<<" "<<0<<endl; continue; }else { int cnt=0; ll ans=0ll; n/=4; int m=sqrt(n); for(ll i=1;i<=m;i++) { if((n%i)==0) { ans+=n*(i+n/i); ans%=mod; cnt++; } } cout<<cnt<<" "<<ans<<endl; } } return 0; }
#include<iostream> #include<cmath> using namespace std; typedef long long ll; const ll mod=1e9+7; int main() { //freopen("D:\\common_text\\code_stream\\in.txt","r",stdin); //freopen("D:\\common_text\\code_stream\\out.txt","w",stdout); int t; ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin>>t; while(t--) { int n; cin>>n; double k=sqrt(n); if(k==(int)k) { cout<<"infty"<<endl; continue; } if(n%4!=0){ cout<<0<<" "<<0<<endl; continue; }else { int cnt=0; ll ans=0ll; n/=4; int x,y,z; int m=sqrt(n); for(int i=1;i<=m;i++) { if((n%i)==0) { ans+=1ll*n*(i+n/i); ans%=mod; cnt++; } } cout<<cnt<<" "<<ans<<endl; } } return 0; }
以上告诉我们,要学会优化!