http://poj.org/problem?id=2853
一道数学题,就是有N个询问,问每个数能分成多少公差为1的等差数列的和,并且长度要大于1。这题的答案就是这个数除1以外的奇约数的个数,可以用O(sqrt(n))的时间来求解,是可以过的,但是O(n)就过不了。
0ms AC代码:
/*
Problem: Sequence Sum Possibilities
Source: POJ 2853
Author: fts2001
*/
#include <iostream>
using namespace std;
int t,id,n,cnt;
int main(){
ios::sync_with_stdio(false);
cin>>t;
for(int i=0;i<t;i++){
cin>>id>>n;
cnt=0;
for(int j=1;j*j<=n;j++){
if(n%j==0){
int k=n/j;
if(j&1)cnt++;
if(k&1)cnt++;
if(j==k)cnt--;
}
}
cout<<id<<' '<<--cnt<<endl;
}
return 0;