萌新求助,简单题炸了

P4884 多少个 1?

@[樱初音斗橡皮](/space/show?uid=66287) 你的龟速乘挂了。。。。。。
by RiverFun @ 2019-03-17 14:42:19


龟速乘初始值设为1是什么意思?
by RiverFun @ 2019-03-17 14:42:44


@[Steve_braveman](/space/show?uid=96570) 哦谢谢!!!!!QWQ从快幂改的,改出锅了。。。
by 樱初音斗橡皮 @ 2019-03-17 14:43:27


@[Sai_0511](/space/show?uid=114320) 感谢大佬QWQ
by 樱初音斗橡皮 @ 2019-03-17 14:43:56


@[樱初音斗橡皮](/space/show?uid=66287) ```cpp #include <iostream> #include <cstdio> #include <cmath> #include <map> using std::cin; using std::cout; using std::endl; long long fast_mul(long long x, long long y, long long p) { long long ans=0; while (y) { if (y&1) (ans+=x)%=p; (x+=x)%=p; y>>=1; } return ans; } long long fast_pow(long long base, long long ind, long long p) { long long ans=1; while (ind) { if (ind&1) (ans*=base)%=p; (base*=base)%=p; ind>>=1; } return ans; } long long k, m; long long bsgs(long long a, long long b, long long p) //a^x%p==b { b%=p; long long c=std::sqrt(p)+1; long long a_c=fast_pow(a, c, p); if (!a_c) return !b ? 1 : -1; std::map<long long, long long> mp; for (long long j=0; j<c; ++j) //a^j*b { long long ans=fast_mul(fast_pow(a, j, p), b, p); mp[ans]=j; printf("add:%lld %lld\n", ans, j); } for (long long i=0; i<=c; ++i) //(a^c)^i { long long ans=fast_pow(a_c, i, p); std::map<long long, long long>::iterator it; it=mp.find(ans); printf("find:%lld %lld\n", ans, i); if (it!=mp.end()) { long long j=mp[ans]; if (i*c>=j && ans >= 0) return i*c-j; } } return -1; } int main() { cin>>k>>m; (k=9*k+1)%=m; cout<<bsgs(10, k, m)<<endl; return 0; } ```
by Sai0511 @ 2019-03-17 14:44:44


帮您看了下,现在能过样例了。
by Sai0511 @ 2019-03-17 14:45:03


@[Sai_0511](/space/show?uid=114320) 全WA QWQ
by 樱初音斗橡皮 @ 2019-03-17 14:46:09


@[樱初音斗橡皮](/space/show?uid=66287) 我这里测出来80分啊。。 您是不是注释忘删了?
by Sai0511 @ 2019-03-17 14:46:45


@[樱初音斗橡皮](/space/show?uid=66287) 1:您的a不能%mod 2: long long ans=fast_pow(a_c, i, b); 这里的b应该是p
by Sai0511 @ 2019-03-17 14:51:59


@[Sai_0511](/space/show?uid=114320) 对哦QWQ我总是犯垃圾错误耽误大佬时间。。。
by 樱初音斗橡皮 @ 2019-03-17 14:55:46


上一页 | 下一页