ZZULIOJ 2182: 欧拉函数应用

来源:互联网 发布:蓝鸽集团java很坑人吗 编辑:程序博客网 时间:2024/05/20 18:41

2182: 不是签到题XD

Time Limit: 1 Sec  Memory Limit:64 MB
Submit: 89  Solved: 20

SubmitStatusWeb Board

Description

小明是一个贪心的孩子,他天天想着怎么让自己省钱。有一天他去商店买物品,然而他不是普通人,他有一个马基雅把库内的能力,可以只花掉商品价格与他今日幸运数字x的最大公约数的钱就能买走这个商品。那么问题来了,如果他要买价值从1到x元的x个商品,一共要花掉多少钱。

Input

本题有多组测试数据,每组包含一个整数,代表小明今日的幸运数字x,1<=x<=1e11

Output

对于每组输入,请输出他的花费
每组输出占一行

Sample Input

1
2
3
5

Sample Output

1
3
5
9

HINT

Source

河南省多校连萌(五)

SubmitStatusWeb Board


代码:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;long long  Euler(long long  num){    long long  temp=num;    for(long long i=2;i*i<=num;i++)    if(num%i==0)    {        while(num%i==0)        num=num/i;        temp=temp/i*(i-1);    }    if(num!=1)   temp=temp/num*(num-1);    return temp;} //欧拉函数,求1--n之间所有与n互质的数的个数 int main(){    long long  n,sum,k;    while(scanf("%lld",&n)!=EOF)    {       sum=0;       for(long long i=1;i*i<=n;i++)       {           if(n%i==0) sum=sum+Euler(n/i)*i;                      k=n/i;//循环减半后的处理            if(n%k==0 && k!=i) sum=sum+Euler(n/k)*k;       }       printf("%lld\n",sum);    }    return 0;}


原创粉丝点击