zoukankan      html  css  js  c++  java
  • POJ 2480 Longge's problem 欧拉函数—————∑gcd(i, N) 1<=i <=N

    Longge's problem
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 6383   Accepted: 2043

    Description

    Longge is good at mathematics and he likes to think about hard mathematical problems which will be solved by some graceful algorithms. Now a problem comes: Given an integer N(1 < N < 2^31),you are to calculate ∑gcd(i, N) 1<=i <=N. 

    "Oh, I know, I know!" Longge shouts! But do you know? Please solve it. 

    Input

    Input contain several test case. 
    A number N per line. 

    Output

    For each N, output ,∑gcd(i, N) 1<=i <=N, a line

    Sample Input

    2
    6

    Sample Output

    3
    15

    Source

    POJ Contest,Author:Mathematica@ZSU
     
     1 /*
     2 
     3 题意:∑gcd(i, N) 1<=i <=N。由于N 2^31.
     4 刚开始想用欧拉求得1的个数,再求N的素因子,用容斥
     5 来求解。发现,就算是求得的素因子,也不最大公约数。
     6 
     7 HUD的一道题,提供了思路。
     8 
     9 枚举吧。
    10 if(N%i==0)
    11 {
    12 最大公约数为1的时候,有几个。欧拉值(N/1);
    13 最大公约数为2的时候,有几个。欧拉值(N/2);
    14 .....
    15 }
    16 
    17 */
    18 
    19 #include<iostream>
    20 #include<cstdio>
    21 #include<cstdlib>
    22 #include<cstring>
    23 using namespace std;
    24 
    25 
    26 __int64 Euler(__int64 n)
    27 {
    28     __int64 i,temp=n;
    29     for(i=2;i*i<=n;i++)
    30     if(n%i==0)
    31     {
    32         while(n%i==0)
    33         n=n/i;
    34         temp=temp/i*(i-1);
    35     }
    36     if(n!=1)
    37     temp=temp/n*(n-1);
    38     return temp;
    39 }
    40 
    41 int main()
    42 {
    43     __int64 n,i,sum,k;
    44     while(scanf("%I64d",&n)>0)
    45     {
    46        sum=0;
    47        for(i=1;i*i<=n;i++)
    48        {
    49            if(n%i==0)
    50            sum=sum+Euler(n/i)*i;
    51            k=n/i;
    52            if(n%k==0 && k!=i)
    53            sum=sum+Euler(n/k)*k;
    54        }
    55        printf("%I64d
    ",sum);
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    纯CSS实现自动轮播,CSS变量的定义与使用,计算属性的使用
    input:file样式怎样修改
    Div转为Canvas简直不要太好玩~~~
    oracle nvl2函数
    oracle 子查询
    oracle 分组函数执行分析
    oracle外部表
    oracle USING 用法
    面向对象进阶
    面向对象基础
  • 原文地址:https://www.cnblogs.com/tom987690183/p/3247439.html
Copyright © 2011-2022 走看看