整除化分块
原题链接:2018ccpc吉林赛区(重现赛)
找规律:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int t;
double m;
double n[1000];
cin>>t;
// for(int i=1;i<=t;i++)
// cin>>n[i];
for(int i=1;i<=t;i++)
{
cin>>m;
// double cnt1=-1-sqrt(1+n[i]);
double cnt2=-1+sqrt(1+m);
int qz=ceil(cnt2);
// cout<<"cnt1="<<cnt1<<' '<<"cnt2="<<cnt2<<' '<<"qz="<<qz<<endl;
if(qz%2==0) cout<<"Case "<<i<<": "<<"even"<<endl;
else cout<<"Case "<<i<<": "<<"odd"<<endl;
}
}
整除化分块:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 2e5 + 10, mod = 1e9 + 7;
int main() {
int T, n, kase = 0;
cin>>T;
while (T--) {
cin>>n;
ll ans = 0;
for (int l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
ans += 1ll * (r - l + 1) * (n / l);
}
printf("Case %d: ", ++kase);
if (ans % 2)
puts("odd");
else
puts("even");
}
}