已解决 查宣乔 初级守护 题目链接: 酷丁编程:8301 #include<iostream> #include<cmath> using namespace std; long long a,b,x,cnt=0; int main(){ cin>>a>>b>>x; for(int i=max(int(sqrt(a)),2);i<=1e9+10;i++){ int t=i*i*i; if(t>b) break; if(t%x!=0){ cnt++; } } cout<<cnt; return 0; }
已采纳 汪思源 高级守护 开longlong数组记下小于1e18的完全立方数、 然后lower_bound二分查找a 再upper_bound二分查找b,再-- 然后遍历这两个范围, 如果a[i]不是x的倍数,++ans 最后输出ans