zoukankan      html  css  js  c++  java
  • LightOJ 1336 Sigma Function 算数基本定理

    题目大意:f(n)为n的因子和,给出 n 求 1~n 中f(n)为偶数的个数.

    题目思路:算数基本定理:

    n=p1^e1*p2^e1 …… pn^en (p为素数);

    f(n)=(1+p1+p1^2+p^3……+p^e1)*(1+p2+p2^2……+p2^e2)……*(1+pn+pn^2……+pn^en)。

    偶数个个奇数相乘仍为奇数,奇数个奇数相乘则为偶数,为了使f(n)为奇数,那么多项式中的每一项都应为奇数。

    对于每个多项式内:偶数个奇数相加为偶数,奇数个奇数相加为奇数,为了使多项式为奇数,那么e应为偶数(因为前面还要加1)。

    我们知道:

    若 n=p1^e1*p2^e1 …… pn^en;

    那么 n^2=(p1^e1*p2^e1 …… pn^en)^2 =p1^2e1*p2^2e1 …… pn^2en。

     2为唯一一个偶素数,且p=2的项一定为奇数。

    所以我们则需要统计1到n中的平方数个数和2倍的平方数的个数,得到的为1到n中f(n)为奇数的个数。

    #include<cstdio>
    #include<stdio.h>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<queue>
    #define INF 0x3f3f3f3f
    #define MAX 1005
    
    using namespace std;
    
    int main()
    {
        int cnt=1,T;
        long long n,sum;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%lld",&n);
            sum=0;
            for(long long i=1;i*i<=n;i++)
            {
                sum++;
                if(2*i*i <= n)
                    sum++;
            }
            printf("Case %d: %lld
    ",cnt++,n-sum);
        }
    }
    View Code
  • 相关阅读:
    【转】免费搭建独立博客,WordPress+独立域名+独立空间
    MongoDB索引
    面向对象
    浏览器为webapp
    转载Chrome浏览器IOS
    浅淡Webservice、WSDL三种服务访问的方式(附案例)
    Plupload
    转载Yale CAS + .net Client 实现 SSO(6)
    java 对Hbase的基本操作
    【精】iOS开发视频教程下载
  • 原文地址:https://www.cnblogs.com/alan-W/p/5889561.html
Copyright © 2011-2022 走看看