Problem C. 课堂作业-6-3
时间限制 1000 ms
内存限制 64 MB
题目描述
李老师的lucky number 是3,5和7,他爱屋及乌,还把所有质因数只有3,5,7的数字认定为lucky number,比如9, 15, 21, 25等等。请聪明的你帮忙算一算小于等于x的lucky number有多少个?
输入数据
一个正整数x,3=<x<=1000000000000
输出数据
小于等于x的lucky number的个数。
样例输入
49
样例输出
11
样例说明
int存不下
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n;
scanf("%lld",&n);
int sum=0;
for(int i=0;i<=(log(n)/log(3))+1;i++){//换底公式,同时注意整数除可能会丢失精度,遂+1
for(int j=0;j<=(log(n)/log(5))+1;j++){
for(int k=0;k<=(log(n)/log(7))+1;k++){
if(pow(3,i)*pow(5,j)*pow(7,k)<=n&&(i+k+j)>0){//判断i=j=k=0的不算情况
sum++;
}
}
}
}
printf("%d",sum);
return 0;
}
换底公式:c语言对数函数log的使用_小龙的博客-CSDN博客_c语言log函数
C语言log库函数源码:log10 ( ) 【C语言库函数源代码】_ammana_babi的专栏-CSDN博客
这里为什么提到log源码呢?因为在好奇直接手算和C语言计算的时间问题。。最后发现在N=情况下手算直接写i<=27()竟然比库函数i<=快,不知道为什么。
在循环边界中注意整数除可能会丢失精度,遂+1
以及i=j=k=0的情况,这时是不算的。