博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2182: 不是签到题XD
阅读量:4963 次
发布时间:2019-06-12

本文共 1177 字,大约阅读时间需要 3 分钟。

2182: 不是签到题XD(郑州轻工业大学oj)

Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 105 Solved: 25

SubmitStatusWeb Board

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

Input

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

Output

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

分析

ni=1gcd(i,n)

gcd(i,n)=k
gcd(i/k,n/k)=1
求 n/k欧拉函数值,即是求有多少个数与n的最大公约数为k,然后将k = 1,2…..n 相加即为所求值

参考代码

LL Euler(LL n){    if(n == 1)        return 1;    LL euler = n;    for(int i = 2;i * i <= n; ++i)    {        if(n % i ==0)        {            euler = euler / i * (i-1);            while(n%i==0)                n /= i;        }    }    if(n != 1)        euler = euler / n *(n-1);    return euler;}int main(void){    std::ios::sync_with_stdio(false);    LL n;    while(cin>>n)    {       LL ans = 0;//       if(n == )       for(LL i = 1;i * i <= n; ++i)       {            if(n % i == 0)            {                ans += i * Euler(n/i);                if(i*i != n)                {                    ans += n/i*Euler(n/(n/i));                }            }       }       cout<
<

转载于:https://www.cnblogs.com/zzuzxy/p/8542624.html

你可能感兴趣的文章
为什么使用指针比使用对象本身更好?
查看>>
Android 将数据写入Execl格式导出U盘、发送邮件
查看>>
C#练习题 if
查看>>
什么是平衡二叉树(AVL)
查看>>
阿里云搭建LAMP环境详细教程
查看>>
atitit.农历的公式与原理以及农历日期运算
查看>>
ES6 之 第七种数据类型Symbol
查看>>
spring data mongodb 配置遇到的几个问题
查看>>
Flume-ng源码解析之Channel组件
查看>>
技术博客
查看>>
设计模式之工厂方法模式
查看>>
在Lua里写unity游戏笔记
查看>>
Maven项目搭建(二):Maven搭建SSM框架
查看>>
我常用的delphi 第三方控件
查看>>
jQuery序列化表单 serialize() serializeArray()
查看>>
java python oracle推断字符串是否为数字的函数
查看>>
Ruby On Rails 4 hello world,Ruby On Rails上手
查看>>
linux杂谈(二十):apache服务配置
查看>>
FastDFS的配置、部署与API使用解读(6)FastDFS配置详解之Storage配置
查看>>
善用#waring,#pragma mark 标记
查看>>