hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542
小明系列故事——未知剩余系
Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 889 Accepted Submission(s): 207
这个简单的谜题就是中国剩余定理的来历。
在艰难地弄懂了这个定理之后,小明開始设计一些复杂的同余方程组X mod ai = bi 来调戏别人,结果是必定的,都失败了。
但是在这个过程中,小明发现有时并不一定要把ai和bi告诉你。他仅仅须要告诉你,ai在区间 [1, X] 范围内每一个值取一次时,有K个ai使bi等于0,或有K个ai使bi不等于0,最小的X就能够求出来了。
你来试试看吧!
每组数据包括两个整数Type和K,表示小明给出的条件。Type为0表示“有K个ai使bi等于0”,为1表示“有K个ai使bi不等于0”。
[Technical Specification]
1. 1 <= T <= 477
2. 1 <= K <= 47777, Type = 0 | 1
3
0 3
1 3
0 10
Case 1: 4
Case 2: 5
Case 3: 48
这道题学到了非常多东西。
1、题目意思:如第一问,因子个数>=k就可以,而非一定等于k;
2、对第一问,原来直接copy的CF 27E的代码(參见本博客),果断TLE…
http://blog.csdn.net/u011026968/article/details/25870377
然后看了题解,发现搜索的时候事实上能够直接一次性把答案都搜索完。这就省去了每次查询都搜索的时间。
3、第二问至今不明确为什么能够枚举出来而不会TLE----------求大神不吝赐教
枚举注意预计范围,本题中,一个数n的约数个数,不会超过2*sqrt(n)。
4、学了下把数分解质因数,也做了一个质因数分解的模板,在还有一篇博客http://blog.csdn.net/u011026968/article/details/25949677
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#include <cmath>
#include <cstdlib>
using namespace std; #define ll long long
const long long INF = (1LL<<62);
const int MAXN=100010; //int prm[10]={2,3,5,7,11,13,17,19,23,29};
int k;
ll ans1,ans2;
int flag,prm[MAXN+1];
bool is[MAXN+1];
int getprm(int n){
int i, j, k = 0;
int s, e = (int)(sqrt(0.0 + n) + 1);
memset(is, 1, sizeof(is));
prm[k++] = 2; is[0] = is[1] = 0;
for(i = 4; i < n; i += 2) is[i] = 0;
for(i = 3; i < e; i += 2) if(is[i]) {
prm[k++] = i;
for(s = i * 2, j = i * i; j < n; j += s)
is[j] = 0;
// 由于j是奇数,所以+奇数i后是偶数,不必处理!
}
for( ; i < n; i += 2) if(is[i]) prm[k++] = i;
return k; // 返回素数的个数
} ll factor[101][2];
int facnt;
int div(ll x)
{
//ll a=sqrt(x*0.1)+1,tmp=x,num=1,cnt=0,facnt=0;
int num=1;
facnt=0;
ll tmp=x;
for(int i=0;prm[i]<=tmp/prm[i];i++)
{
if(tmp%prm[i] == 0)
{
factor[facnt][0]=prm[i];
factor[facnt][1]=0;
while(tmp%prm[i] == 0)
{
tmp/=prm[i];
factor[facnt][1]++;
}
num*=(factor[facnt][1]+1);
facnt++;
}
}
if(tmp!=1)
{
factor[facnt][0]=tmp;
factor[facnt++][1]=1;
num*=2;
}
return num;
}
long long aa[47787];
void dfs1(int a,int b,ll tmp)
{
if(a>47777)return;
if(tmp<=INF && (aa[a]==0||aa[a]>tmp)){aa[a]=tmp;}
for(int i=1;i<=62;i++)
{
if(tmp>INF/prm[b])break;
tmp*=prm[b];
dfs1(a*(i+1),b+1,tmp);
}
} void solve()/*n的约数的个数不多于2*sqrt(n)*/
{
ll x=1;
while(x*x <= 4*(k+x))
{
ll ans=div(k+x);
if(ans == x)
{
printf("%I64d\n",x+k);
return;
}
x++;
}
printf("Illegal\n");
} int main()
{
int ncase,t;
getprm(MAXN-1);
scanf("%d",&ncase);
memset(aa,0,sizeof(aa));
dfs1(1,0,1);
for(int icase=1;icase<=ncase;icase++)
{ flag=0;
ans1=ans2=INF+1;
scanf("%d%d",&t,&k);
printf("Case %d: ",icase);
//system("pause"); if(!t)
{ if(aa[k]!=0)printf("%I64d\n",aa[k]);
else printf("INF\n");
}
else
{
solve();
} }
return 0;
}
hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛的更多相关文章
- HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4528 小明系列故事——捉迷藏 Time Limit: 500/200 MS (Java/O ...
- 2013腾讯编程马拉松初赛第〇场(HDU 4503) 湫湫系列故事——植树节
http://acm.hdu.edu.cn/showproblem.php?pid=4503 题目: 已知湫湫的班里共有n个孩子,每个孩子有Bi个朋友(i从1到n),且朋友关系是相互的,如果a小朋友和 ...
- HDU 4508 沼泽湿地系列故事——记住减肥I (2013腾讯编程马拉松预赛第一)
pid=4508">http://acm.hdu.edu.cn/showproblem.php?pid=4508 题目大意: 给定一些数据. 每组数据以一个整数n開始,表示每天的食物清 ...
- HDU 4508 湫湫系列故事——减肥记I (2013腾讯编程马拉松初赛第一场)
http://acm.hdu.edu.cn/showproblem.php?pid=4508 题目大意: 给定一些数据. 每组数据以一个整数n开始,表示每天的食物清单有n种食物. 接下来n行,每行两 ...
- 2013腾讯编程马拉松初赛第〇场(HDU 4504)威威猫系列故事——篮球梦
http://acm.hdu.edu.cn/showproblem.php?pid=4504 题目大意: 篮球赛假如我们现在已经知道当前比分 A:B,A代表我方的比分,B代表对方的比分,现在比赛还剩下 ...
- 2013腾讯编程马拉松||HDU 4505 小Q系列故事——电梯里的爱情 水水水
http://acm.hdu.edu.cn/showproblem.php?pid=4505 题目大意: 电梯最开始在0层,并且最后必须再回到0层才算一趟任务结束.假设在开始的时候已知电梯内的每个人要 ...
- 2013腾讯编程马拉松初赛第一场(3月21日) 湫湫系列故事——减肥记II ----线段树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4509 虽然制定了减肥食谱,但是湫湫显然克制不住吃货的本能,根本没有按照食谱行动! 于是,结果显而易见… 但 ...
- 2013腾讯编程马拉松初赛第〇场(3月20日)湫湫系列故事——植树节 HDOJ 4503
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4503 思路:hint from a GOD-COW. 将每一个人模拟成图的一个点,两点连线当且仅当两人是朋 ...
- 2013腾讯编程马拉松初赛第二场(3月22日) 小Q系列故事——为什么时光不能倒流 ---好水!!
我以为我会是最坚强的那一个 我还是高估了自己 我以为你会是最无情的那一个 还是我贬低了自己 就算不能够在一起 我还是为你担心 就算你可能听不清 也代表我的心意 那北极星的眼泪 闪过你曾经的眼角迷离 那 ...
随机推荐
- [JSP][JSTL]页面调用函数--它${fn:}内置函数、是推断字符串是空的、更换车厢
页面中调用函数--之${fn:}内置函数 函数描写叙述 fn:contains(string, substring) 假设參数string中包括參数substring,返回true fn:contai ...
- LCA 学习算法 (最近的共同祖先)poj 1330
Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20983 Accept ...
- Reveal:分析iOS UI该武器
Reveal是分析iOS应用UI的利器: Reveal可以在执行时调试和改动iOS应用程序.它能连接到应用程序,并同意开发人员编辑各种用户界面參数.这反过来会马上反应在程序的UI上.就像用FireBu ...
- C标签之forEach
<c:forEach>标签用于通用数据循环,它有下面属性 属 性 描 述 是否必须 缺省值 items 进行循环的项目 否 无 begin 開始条件 否 0 end 结束条件 否 集合中的 ...
- ArcSDE SDK For Java二次开发介绍、演示样例
在一个工作中,遇到了须要java后台来查询ArcGIS 中用到的Oracle数据库空间数据,因为对ArcGIS空间数据首次接触,仅仅知道Oracle能够使用ST_GEOMETRY字段存储,例如以下图 ...
- mysql声明摘要
前一段时间,和学生参加该项目的最终完成,主要的项目是做一个报告,它涉及到很多sql声明,因此,采取下一个汇总. 一.基金会 1.数据库相关的命令 a>.创建数据库 CREATE DATABASE ...
- ajaxFileUpload+struts2多文件上传(动态添加文件上传框)
上一篇文章http://blog.csdn.net/itmyhome1990/article/details/36396291介绍了ajaxfileupload实现多文件上传, 但仅仅是固定的文件个数 ...
- Effective C++:规定27:尽量少做动作的过渡
(一个)C风格遗留转换: (T)expression T(expression) (二)C++提供四种新式转型: (1)const_cast<T>(expression):去除表达式的常量 ...
- vijos 1234 口袋的天空
最小生成树kruscal算法 #include<iostream> #include<algorithm> #include<cstring> #define ma ...
- 于linux已安装moodle
本文介绍了两个虚拟机的安装linux server 及相关服务,随着后这些基础.安装应用程序服务 moodle 2.7+ 它是使用最广泛的平台,网络课程. 在安装过程中moodle之前,需要支持软件 ...