HDU 4542 小明系列故事——未知剩余系 (数论|反素数)
分析
kuangbin的blog已经讲的很好了,我做一点补充
1.当做x*y>z的比较时,如果x \(\ast\) y过大,可以写成x>z/y
2.分解质因数时选择用f[][0]保存质数,方便查错
3.写程序时分段写,防止变量名写错查很久
一道不错的题(对我来说)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
const ll INF = 1LL<<62;
const int maxn = 1000;
int prime[maxn+10];
int p[maxn+10];
void get_prime()
{
F(i,2,maxn)
{
if(!p[i]) prime[++prime[0]]=i;
for(int j=1;j<=prime[0]&&prime[j]*i<=maxn;++j)
{
p[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
ll a[50050];
void dfs(ll num,int k,int sum,int limit)
{
if(sum>47777) return ;
if(a[sum]==0||a[sum]>num) a[sum]=num;
for(int i=1;i<=limit;++i)
{
if(num>INF/prime[k]) break;
num*=prime[k];
if(num>INF) break;
dfs(num,k+1,sum*(i+1),i);
}
}
void init()
{
mem(a,0);dfs(1,1,1,62);
}
int f[100][2];
ll calc(ll num)
{
mem(f,0);
int cnt=0;
for(int i=1;prime[i]<=num/prime[i];++i) if(num%prime[i]==0)
{
f[++cnt][0]=prime[i];
while(num%prime[i]==0) { f[cnt][1]++;num/=prime[i]; }
}
if(num!=1) f[++cnt][0]=num,f[cnt][1]=1;
ll ans=1;
F(i,1,cnt) ans*=(ll)(f[i][1]+1);
return ans;
}
void solve(int k)
{
for(ll x=2;x*x<=4*(x+k);++x)
{
if(x==calc(x+k)) { printf("%I64d\n",x+k );return; }
}
puts("Illegal");
}
int main()
{
int t,type,k;
get_prime();
init();
scanf("%d",&t);
F(qq,1,t)
{
scanf("%d %d",&type,&k);
printf("Case %d: ",qq );
if(type==0)
{
if(a[k]==0) puts("INF");
else printf("%I64d\n",a[k] );
}
else
{
solve(k);
}
}
return 0;
}
HDU 4542 小明系列故事——未知剩余系 (数论|反素数)的更多相关文章
- hdu 4542 "小明系列故事——未知剩余系" (反素数+DFS剪枝)
传送门 参考资料: [1]:https://blog.csdn.net/acdreamers/article/details/25049767 题意: 输入两个数 type , k: ①type = ...
- hdu 4542 小明系列故事——未知剩余系
小明系列故事——未知剩余系 题意:操作0表示某数有n个约数,操作1为某数有n个非约数:n <= 47777,若是存在小于2^62的数符合,则输出该数,否则若是不存在输出Illegal,若是大于2 ...
- hdu 4542 小明系列故事——未知剩余系 反素数 + 打表
小明系列故事——未知剩余系 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Prob ...
- HDU4542 小明系列故事——未知剩余系
大赞的数论题: 大致思路: 对于TYPE=1的情况,认为 X 中有 X-K个约数,求最小的X,X-K>0 那么化为B+K的约数为B, 我们知道(B+K)的约数<=2*SQRT(B+K);这 ...
- hdu 4506 小明系列故事——师兄帮帮忙【幂取模乱搞】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4506 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)
小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- HDU 4511 小明系列故事——女友的考验 (AC自动机 + DP)
小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- HDU 4828 小明系列故事——捉迷藏
漂亮妹子点击就送:http://acm.hdu.edu.cn/showproblem.php?pid=4528 Time Limit: 500/200 MS (Java/Others) Memo ...
- HDU - 4511 小明系列故事――女友的考验(AC自己主动机+DP)
Description 最终放寒假了,小明要和女朋友一起去看电影.这天,女朋友想给小明一个考验,在小明正准备出发的时候.女朋友告诉他.她在电影院等他,小明过来的路线必须满足给定的规则: 1.如果小明 ...
随机推荐
- android的armeabi和armeabi-v7a
在ANE中如果SDK调用了so库,则需要把so库放到ANE下Android-ARM/lib/armeabi (调试模式)或者 armeabi-v7a(发行模式)下. 可以贴个ADT代码说明问题: // ...
- SVN系列之—-SVN版本回滚的办法
例:SVN版本为:TortoiseSVN 1.9.7 一.SVN简介 subversion(简称svn)是一种跨平台的集中式版本控制工具,支持linux和windows. 版本控制解决了:*代码管理混 ...
- 【转载】回调函数(callback)是什么?
一个很形象的例子: 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货.在这个例子里,你的电话号码就叫回 ...
- Vue 建立工程
npm install -g vue npm install -g vue-cli vue init webpack my-project cd my-project npm isntall npm ...
- openwrt 配置rsync服务
一: rsyn简介 remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息. rsync是用 “rsyn ...
- Android Webview的测试
1.查看当前的所有窗口: Set contexts= driver.getContextHandles(); System.out.println(contexts); 打印出当前所有的窗口 Set& ...
- Android 通过Application 传递数据
</pre><pre> package com.example.ApplicationTest; import android.app.Application; /** * C ...
- Git使用之Permission Denied问题解决
今天碰到了Git的Permission Denied问题. 在安装好git之后,我们通常会配置username和邮箱 git config --global user.name "zengj ...
- HDU 6044 Limited Permutation 读入挂+组合数学
Limited Permutation Problem Description As to a permutation p1,p2,⋯,pn from 1 to n, it is uncomplica ...
- HttpSession and Hibernate session
一.javax.servlet.http.HttpSession是一个抽象接口 它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是 ...