hdu 3826
来源:互联网 发布:淘宝店铺专业版收费吗 编辑:程序博客网 时间:2024/05/05 03:41
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3826
算法分析:
对于2-10^18的任意一个数 都能转化成如下的形式 ……等等 a,b,c,d都是质数
然后
情况1 将输入的num 先从 2-10^6中的质数进行相除,有一个质数能连出两次以上 就输出no
情况2 如果能整除 num=num/i 然后 如果 相除后num==1 输出yes
进行完一二操作后 本题中剩下的num这个数 (因为不存在1-10^6的质数) 最多只有两个质数
情况3 只有两种结果 两个10^6-10^9 的质数相乘 或者只有一个质数 在10^6-10^18次方之间。 这样只要判断第一种结果是否是两个相同质数相乘的情况了~~
#include<stdio.h>#include<math.h>#include<string.h>#define M 1100000#define MIN 0.00001int a[M],b[500000],flag;int init(){ int i,j; memset(a,0,sizeof(a)); for(i=2;i*i<=M;i++) { if(!a[i]) { for(j=i*2;j<=M;j=j+i) { a[j]=1; } } } j=1; for(i=2;i<=M;i++) { if(!a[i]) { b[j]=i; j++; } } return j;}void pd(double nu){ double a; a=sqrt(nu); if(a-floor(a)<=MIN) flag=0; else flag=1;}int main(){ int n; scanf("%d",&n); int cs=0; int len=init(); //printf("%d\n",len); while(n--) { cs++; __int64 num; int i; scanf("%I64d",&num); flag=0; for(i=1;i<len;i++) { int sum=0; while(num%b[i]==0) { num/=b[i]; sum++; } if(sum>=2) { flag=1; break; } } if(flag==1) {printf("Case %d: No\n",cs);continue;} if(num==1) {printf("Case %d: Yes\n",cs);continue;} pd((double)num); if(flag==0) printf("Case %d: No\n",cs); else printf("Case %d: Yes\n",cs); } return 0;}
- hdu 3826
- hdu 3826
- hdu 3826 Squarefree number
- HDU 3826 Squarefree number
- HDU-3826-Squarefree number
- HDU 3826 Squarefree number
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- 配置vim的Nginx配置文件语法高亮的脚本
- android.adb命令
- js得到两个日期之间间隔的天数
- SSH web.xml配置
- Sybase的安装、配置及使用(二)
- hdu 3826
- 如何搭建“类Exadata”系统
- 软考
- python实现二叉树
- 基于WINCE6.0+S3C2443的camera驱动
- 【Boost】通过date库中一些类型计算节假日
- Android 调用系统邮件程序发送邮件
- powerdesigner中动态修改物理模型实体的方法
- 也说跳槽