jzoj5196. 【NOIP2017提高组模拟7.3】B (数论,巧妙的暴力)
思路:
这道题第一眼我以为是暴力
但一看数据范围差点没吓死我
但突然发现一个好玩的东西
gcd(a,b)=gcd(a-b,b)(a>b)
这时候我们的暴力就可以加以优化
在打表时可以跳着打
一个gcd打一次表
累加即可
快多了
代码:
#include<iostream> #include<cstdio> #define rii register int i #define rij register int j using namespace std; int t,ans[10000005],n; void ycl() { for(rii=1;i<=10000000;i++) { for(rij=i*2;j<=10000000;j+=i) { if((j^(j-i))==i) { ans[j]++; } } ans[i]+=ans[i-1]; } return; } int main() { ycl(); scanf("%d",&n); printf("%d",ans[n]); return 0; }