zoukankan      html  css  js  c++  java
  • Sum of Consecutive Integers LightOJ

    题目链接

    题意:给你一个数n(n<=10^14),然后问n能用几个连续的数表示;

    思路:设是以x开始的一段数的和为n,且有y个数,n=(x+x+y-1)*y/2。化简为n/y-(y-1)/2=x。因为x为整数,所以(y-1)/2和n/y都为整数。所以y-1为偶数,y为奇数。所以方案的种数就是n的奇数因子的个数。

    所以对于唯一分解定理,其答案就是奇数质因子的幂次+1的乘积,最后去掉1。

    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include<map>
    #include<vector>
    #include<algorithm>
    #define N 2000006
    #define ll long long
    #define ull unsigned long long 
    using namespace std;
    bool vis[10000010];
    int prime[N];
    int main()
    {
        int k=0;
        for(int i=2;i<=10000000;i++)
        {
            if(!vis[i])
            {
                prime[k++]=i;
                for(int j=i+i;j<=10000000;j+=i)
                    vis[j]=1;
            }
        }
        int t;
        int u=0;
        scanf("%d",&t);
        while(t--)
        {
            ll n;
            scanf("%lld",&n);
            ll ans=1;
            for(int i=0;i<k&&prime[i]*prime[i]<=n;i++)
            {
                ll sum=0;
                while(n%prime[i]==0)
                {
                    n/=prime[i];
                    sum++;
                }
                if(prime[i]%2==1)
                {
                    ans*=(sum+1);
                }
            }
            if(n>1&&n%2)
            {
                ans*=2;
            }
            printf("Case %d: %d",++u,ans-1);
            printf("
    ");
         }  
    }
  • 相关阅读:
    win8 tips
    从win10体验到重装win8
    win10 体验 日志
    磁盘分区与多系统安装(windows ubuntu)
    使用ultraISO制作ISO镜像文件
    C++中const用法总结
    4月8号的打卡
    Java第二次作业
    第一次Java作业
    NX二次开发-改变自制UI界面大小
  • 原文地址:https://www.cnblogs.com/2462478392Lee/p/13692209.html
Copyright © 2011-2022 走看看