MMT3. 怪数
描述
小M突然对怪数产生了兴趣。假设一个数n,如果[n/1]+[n/2]+...+[n/k](k为趋近于正无穷的正整数)为一个偶数,那么这个数是一个怪数,现在给定一个区间[a,b],求[a,b]之间有多少怪数。
[x]表示不大于x的最大整数。
输入描述
输入只包含一行,有两个非负整数a,b(0<=a,b<=2^31,a<=b)。输出描述
输出区间[a,b]中的怪数的个数。示例1
输入:
0 10
输出:
6
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-05-20
#include<stdio.h> #include<math.h> int main(){ long long int a,b,i=1,j=1,k,n=0,suma=0,sumb=0; scanf("%lld%lld",&a,&b); while (suma<a+1){ suma+=i;i+=2; } i-=2; while (sumb<b+1){ sumb+=j;j+=2; } j-=2; for (k=i;k<=j;k+=2){ if (k%4==1){ if (k==i) n=n+suma-a; else if (k!=i && k==j) n=n+b+j-sumb+1; else if(k!=i && k!=j) n+=k; } } printf("%lld",n); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-05-20
#include<stdio.h> #include<math.h> int main(){ long long int a,b,i=1,j=1,k,n=0,suma=0,sumb=0; scanf("%lld%lld",&a,&b); while (suma<a+1){ suma+=i;i+=2; } i-=2; while (sumb<b+1){ sumb+=j;j+=2; } j-=2; for (k=i;k<=j;k+=2){ if (k%4==1){ if (k==i) n=n+suma-a; else if (k!=i && k==j) n=n+b+j-sumb+1; else if(k!=i && k!=j) n+=k; } } printf("%lld",n); return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 380KB, 提交时间: 2020-10-31
#include<stdio.h> #include<math.h> int main(){ long long int a,b,i=1,j=1,k,n=0,suma=0,sumb=0; scanf("%lld%lld",&a,&b); while (suma<a+1){ suma+=i;i+=2; } i-=2; while (sumb<b+1){ sumb+=j;j+=2; } j-=2; for (k=i;k<=j;k+=2){ if (k%4==1){ if (k==i) n=n+suma-a; else if (k!=i && k==j) n=n+b+j-sumb+1; else if(k!=i && k!=j) n+=k; } } printf("%lld",n); return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 404KB, 提交时间: 2021-07-03
#include <bits/stdc++.h> #define ll long long using namespace std; ll F(ll x){ if(x<0) return 0; else if(x==0) return 1; ll s=0, v = sqrt(x); if(v%2){ s = v*(v+1)/2; }else{ ll t = v-1; s = t*(t+1)/2; s += x-v*v+1; } return s; } int main(){ ll a, b; cin>>a>>b; cout<<F(b)-F(a-1)<<endl; return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 448KB, 提交时间: 2021-09-14
#include <bits/stdc++.h> using namespace std; int main(){ unsigned int a,b; cin >> a >> b; int num = 0; int i = 0; while(pow(i,2) < a) { i++; } while(pow(i,2) <= b) { if((i-1)%2 == 0) { num += pow(i,2) - a; a = pow(i,2); i++; } else { a = pow(i,2); i++; } } if((i-1) % 2 == 0) num += b - a + 1; cout << num; return 0; }