码迷,mamicode.com
首页 > 其他好文 > 详细

无题---------------构造函数

时间:2018-10-21 21:58:30      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:lock   ice   int   题目   clu   lis   orange   turn   +=   

题目描述

Bob 得到了 Alice 的礼物后十分开心,研究了更多数字。Bob 觉得一个数字 x 是优美的,当且仅当存在一个正整数 a 和一个 > 1 的正整数 b,使得 x = a^b

Bob 没事的时候就喜欢数这些优美的数字,然而 Bob 的计算能力有限,如果数字太大就算不出来了。现在他想让你帮他算出 1 到 N 中有多少个数是优美的。

输入输出格式

输入格式:

 

一行一个正整数 N,如题面所述。

 

输出格式:

 

一行一个整数 ans,表示 11 到 N 中优美的数的个数。

 

输入输出样例

输入样例#1:
10
输出样例#1:
4

说明

1010 以内的优美得数有 1, 4, 8, 9。

对于 30% 的数据满足 1  N  105

对于 70% 的数据满足 1  N  1010

对于 100% 的数据满足 1  N  1018


 

100分做法:

  1. 对于每个有贡献的 x ,我们考虑如何用唯一的形式表示它,方式有很多种。

    2. 对于一个有贡献的 x ,我们用所有 x = a Λ b 中使得 b 最大的一种形式来表示它来表示它。

    3. 定义函数 g(b)表示有多少 x 能被表示为 a Λ b。函数 f (b)表示有多少 x 能别表示为 a Λ b ,且 b 满足上述性质。

    4. 显然 f 函数的和即为答案。

    5. g 函数的求法:pow(n , 1 / b)。

    6. f  函数的求法:g(b)-Σ i | b f (i)

 

技术分享图片
 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 ll n,f[70],ans;
 5 int main()
 6 {
 7     scanf("%lld",&n);
 8     for(int i=60;i>=2;--i)
 9     {
10         f[i]=(ll)pow(n,1.0/i)-1;
11         for(int j=i+i;j<=60;j+=i)
12             f[i]-=f[j];
13         ans+=f[i];
14     }
15     printf("%lld",ans+1);
16     return 0;
17 }
代码

 

无题---------------构造函数

标签:lock   ice   int   题目   clu   lis   orange   turn   +=   

原文地址:https://www.cnblogs.com/wyher/p/9826714.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!