您的位置:首页 > 其它

LightOJ 1278

2015-07-02 15:50 176 查看
链接:点击打开链接

题意:给出一个数n,求连续自然数和为n有几种情况;

代码:

#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
bool prime[10000005];
long long num[670000];
int main(){
long long i,j,k,n,t,sum,cur,temp;
k=0;
memset(prime,0,sizeof(prime));
for(i=2;i<10000005;i++){
if(!prime[i])
num[k++]=i;
for(j=0;j<k&&num[j]*i<10000005;j++){
prime[num[j]*i]=1;      //线性素数筛
if(i%num[j]==0)
break;
}
}
cin>>t;
for(cur=1;cur<=t;cur++){
cin>>n;
sum=1;
printf("Case %lld: ",cur);
for(i=0;i<k&&num[i]*num[i]<=n;i++){
temp=0;
if(n%num[i]==0){
while(n%num[i]==0){     //根据推导就是求n所有奇数因子,注意是所有因子
temp++;
n/=num[i];
}
if(num[i]%2!=0)
sum*=(temp+1);          //素因子分解求因子个数,每个数从0~temp可能有
}                       //temp+1中可能
}
if(n>1&&n%2!=0)
sum*=2;
cout<<sum-1<<endl;          //去掉1这个因子
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: