LightOJ 1278

来源:互联网 发布:adobeacrobat for mac 编辑:程序博客网 时间:2024/06/16 11:35

链接:点击打开链接

题意:给出一个数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;}


 

 

0 0
原创粉丝点击