HDU-5778 abs(数论)
来源:互联网 发布:第八届中国云计算大会 编辑:程序博客网 时间:2024/05/17 03:04
abs
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1163 Accepted Submission(s): 407
Problem Description
Given a number x, ask positive integer y≥2 , that satisfy the following conditions:
1. The absolute value of y - x is minimal
2. To prime factors decomposition of Y, every element factor appears two times exactly.
1. The absolute value of y - x is minimal
2. To prime factors decomposition of Y, every element factor appears two times exactly.
Input
The first line of input is an integer T ( 1≤T≤50 )
For each test case,the single line contains, an integer x (1≤x≤1018 )
For each test case,the single line contains, an integer x (
Output
For each testcase print the absolute value of y - x
Sample Input
511124290871699579095
Sample Output
23656724470
思路:由于y质因数分解式中每个质因数均出现2次,那么y是一个完全平方数,设y=z*z,题目可转换成求z,使得每个质因数出现1次. 我们可以暴力枚举z,检查z是否符合要求,显然当z是质数是符合要求,由素数定理可以得,z的枚举量在logn级别 复杂度 O(4√nlog2√n)
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<limits.h>#include<math.h>#include<queue>#include<algorithm>using namespace std;#define maxn 100005__int64 a[maxn]={1,1};__int64 b[maxn];__int64 ans=-1;__int64 n,x;long long Abs(long long a){if(a<0)return -a;return a;}int main(){long long i,j,T;for(i=2;i<=100000;i++){if(a[i]) continue;for(j=i*i;j<=100000 && j>0;j+=i) a[j]=1;}__int64 k=0;for(i=2;i<=100000;i++) if(!a[i]) b[++k]=i;scanf("%I64d",&T);while(T--){long long tt;ans=-1;int flag;scanf("%I64d",&n); x=(long long)sqrt(n); for(i=x;i<=500+x;i++) { if(Abs(n-i*i)>ans && ans!=-1) break; tt=i; for(j=1;j<=k;j++) { if(tt%b[j]==0) { tt/=b[j]; if(tt%b[j]==0) break;}}if(ans==-1 && j==k+1) ans=Abs(n-i*i);else if(j==k+1 && ans!=-1) ans=min(ans,Abs(n-i*i));}for(i=x;i>=x-500;i--) { if(Abs(n-i*i)>ans && ans!=-1) break; tt=i; for(j=1;j<=k;j++) { if(tt%b[j]==0) { tt/=b[j]; if(tt%b[j]==0) break;}}if(ans==-1 && j==k+1) ans=Abs(n-i*i);else if(j==k+1 && ans!=-1) ans=min(ans,Abs(n-i*i));}if(n==1) printf("3\n"); else if(n==2) printf("2\n"); else printf("%I64d\n",ans); } }
1 0
- hdu 5778 abs (数论)
- HDU-5778 abs(数论)
- HDU 5778 abs(数论)
- HDU 5778 abs
- HDU-5778 abs
- hdu 5778 abs
- hdu 5778 abs
- HDU-5778 abs
- HDU 5778 abs
- HDU-5778-abs【思维】
- hdu 5778 abs(分解质因子,枚举平方数,数论)
- HDU 5778(abs 暴力)
- hdu 5778 abs【暴力枚举】
- HDU-5778-abs(暴力)
- 【HDU】5778 - abs(思维)
- HDU5778 abs(数论)
- abs(数论)
- hdu5778 abs 简单数论
- @SuppressWarnings("serial")
- 同一个tomcat,不同端口启动各自程序
- UGUI学习的第四天
- javascript检验工具的比较
- android studio导入eclipse项目
- HDU-5778 abs(数论)
- 异地多活设计辣么难?其实是你想多了!
- Linux冷门却很重要的命令(六)---chattr(lsattr)
- eclipse中配置maven
- laravel5.1 session flash(信息闪存) 应用
- Python--浅拷贝和深拷贝
- leetcode No59. Spiral Matrix II
- activity的透明处理,以及窗口化问题
- Gluster集群搭建-操作Gluster集群