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;
}

results matching ""

    No results matching ""