博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[数]来自亮亮OJ的五道数学题
阅读量:6425 次
发布时间:2019-06-23

本文共 4157 字,大约阅读时间需要 13 分钟。

做了后面的题就知道前面的题怎么做了呢真棒_(:з」∠)_

 

Light OJ-

  -1138  以为是找规律结果是是找因子个数哒

    显然阶乘这种东西不是能一个一个查的,在下就打了个小表数了数零的个数,以为是逢5impossible其它以4个为周期。wa

    找了网上一个大的表来验证自己的脑胡,对上述规律进行了修改。wa

    好吧其实就是找因子中2*5的对数,因为2太多了所以我们数5就可以了。

#include
#include
#include
using namespace std;typedef long long ll;ll jg(ll n){ ll ans = 0; while (n) { ans += n / 5; n /= 5; } return ans;}int main(){ int t, q; cin >> t; for (int i = 1; i <= t; i++) { cin >> q; int l = 0, r = 600000000; int mid,ans=0; while (l <= r) { mid = (l + r) >> 1; ll p = jg(mid); if (p == q) { ans = mid; r = mid-1; } else if (p > q)r = mid-1; else l = mid+1; } if (ans)printf("Case %d: %d\n", i, ans); else printf("Case %d: impossible\n", i); } return 0;}
LO-1138

    存在性这种东西让二分来判就好惹。

 

  -1370  买素数竹子(警告:这是一个拗口的笑话

    找拥有互质数的个数不小于当前数的那个数,显然素数最优。

    打个表,二分找找第一个比当前数大的质数(素数听起来像是豆制品),然后加起来就完事了。

#include
#include
using namespace std;int p[80000];bool isp[1000005];int co;void pri(){ co = 0; for (int i = 2; i < 1000005; i++)isp[i] = 1; for (int i = 2; i < 1000005; i++) { if (isp[i])p[++co] = i; for (int j = 1; j <= co && i*p[j] < 1000005; j++)isp[i*p[j]] = 0; }}int main(){ pri(); int t; cin >> t; for (int i = 1; i <= t; i++) { int n, a; long long ans = 0; cin >> n; for (int j = 0; j < n; j++) { cin >> a; int l = 1, r = co,mid; while (l + 1 < r) { if (a == 1) {l = 0; break;} mid = (l + r) / 2; if (p[mid] > a)r = mid; else l = mid; } ans += p[l+1]; } printf("Case %d: %lld Xukha\n", i, ans); } return 0;}
LO-1370

    然而红小豆还是re了,prime数组的大小记错了,开小了orz

 

  -1213  真·幻视出题

    一眼看出本质就完事了(不是我看的)

#include
#include
using namespace std;typedef long long ll;int n, mod, a;ll k;ll pm(ll a, ll b) { ll ans = 1; for (; b; b >>= 1, a = a * a%mod) if (b & 1)ans = ans * a%mod; return ans;}int main() { int t; cin >> t; for (int i = 1; i <= t; i++) { cin >> n >> k >> mod; ll ans = 0; for (int j = 0; j < n; j++) { cin >> a; ans += a; } printf("Case %d: %lld\n", i, ans*pm(n, k - 1)%mod *k%mod); } return 0;}
OJ-1213

    本质就是奇怪的排列组合啦,丢给组合数学队友就好了owo

 

  -1236  一道之前做的不会的,后来做了别的题,再回来补发现是一个思路

    然而红小豆还是wa了两发。因为表打小了。请打大小为范围的开方的表。

    代码懒得贴了。和上一篇那个找拥有同一最小公倍数的对数的题完  全  一  样

 

  -1197  学到了新东西(๑•̀ㅂ•́)و✧

    超大的表,不会打..(。•ˇ‸ˇ•。)…

    然后神仙教我米勒拉宾,

    然后t了

    然后神仙去找他曾经做过的类似题去了

    然后红小豆打开了题解(补题就不要难为自己了(˘•ω•˘))

    然后 表  打  二  度

    然后就会了(ŎдŎ;)

    npb[1]=1;是精简板子之后遇到的第一个hack点,以后还是不能省略抹除0和1的存在啊(」><)」

#include
#include
#include
#include
using namespace std;typedef long long ll;int p[100005];bool np[1000005],npb[1000005];int co;void pri(){ co = 0; np[1] = 1; for (int i = 2; i < 1000005; i++) { if (!np[i])p[co++]=i; for (int j = 0; j < co&&i*p[j] < 1000005; j++)np[i*p[j]] = 1; }}int main(){ pri(); int t; cin >> t; ll a, b; for (int i = 1; i <= t; i++) { cin >> a >> b; ll ans = 0; if (b < 100005){ for (int j = a; j <= b; j++) if (!np[j])ans++; printf("Case %d: %lld\n", i, ans); } else { memset(npb, 0, sizeof(npb)); for (int j = 0; j < co&&p[j] <= b; j++) { ll q = a/ p[j]; if (q*p[j] < a)q++; for (ll k = q; k*p[j]<= b; k++) if (k!= 1)npb[k*p[j]- a] = 1; } for (int j = 0; j <= b - a; j++) if (!npb[j])ans++; printf("Case %d: %lld\n", i, ans); } } return 0;}
OJ-1197

    技能  表 打 二 度

    效果  在打了个小一点的素数表只后通过取倍数获得各种非质数,然后捡起剩下的质数并发射出去

 

知道和被接受完全是两回事_(:з」∠)_

 

转载于:https://www.cnblogs.com/non-/p/10816094.html

你可能感兴趣的文章
爱若和布若
查看>>
newifi mini 刷 OpenWRT
查看>>
eclipse部署tigase源码
查看>>
mysql 5.6 主从复制配制
查看>>
iPhoneX隐藏状态栏
查看>>
重读《JAVA与模式》之一
查看>>
一、Mycat 环境搭建
查看>>
关于Java Servlet编译的问题
查看>>
动态库和静态库及混合链接
查看>>
python3 md5加密
查看>>
为啥虚拟内存占用很多
查看>>
OpenSSL-RSA
查看>>
nvm 使用攻略
查看>>
优秀的jQuery自动补齐插件和多值输入插件推荐
查看>>
编程的智慧
查看>>
IOS--CALayer(图层类)
查看>>
进程与线程的理解和直观比喻
查看>>
常用的垃圾回收机制介绍
查看>>
在使用pyqt videopalyer不能播放MP4的解决方法
查看>>
django中timezone转换
查看>>