perfect number
Bob是个很喜欢数字的孩子,现在他正在研究一个与数字相关的题目,我们知道一个数字的完美度是 把这个数字分解成三个整数相乘AAB(0<A<=B)的方法数,例如数字80可以分解成1180,2220 ,445,所以80的完美度是3;数字5只有一种分解方法115,所以完美度是1,假设数字x的完美度为d(x),现在给定a,b(a<=b),请你帮Bob求出
S,S表示的是从a到b的所有数字的流行度之和,即S=d(a)+d(a+1)+…+d(b)。
Input 输入两个整数a,b(1<=a<=b<=10^15) Output 输出一个整数,表示从a到b的所有数字流行度之和。 Sample Input 1 80 Sample Output 107
注意题目的要求,A<= B的
#include <iostream>
#include <math.h>
using namespace std;
int main(){
long long a;
long long b;
long long num = 0;
while(cin>>a>>b){
long long n = pow(a, 1.0/3);
long long m = pow(b, 1.0/3);
for(int i = 1; i < m + 1; i++){
//此时a不满足(A<= B)的情况
if(i*i*i >= a){
long long y = b/(i*i);
num += (y - i + 1);
}
//满足A<= B的情况
else{
long long x = a/(i * i);
long long y = b/(i * i);
num += (y - x);
if(a % (i*i) == 0)
num += 1;
}
}
}
cout<<num<<endl;
return 0;
}