\(\\\)

\(Description\)


\(T\)组数据,每次给出一个正整数 \(N\) ,判断其是否能被任意一个完全平方数整除。

  • \(T\le 20,N\le 10^{18}\)

\(\\\)

\(Solution\)


比较巧妙。

考虑一个数能被完全平方数整除,当且仅当对其分解质因数以后,至少有一个质数的指数\(\ge 2\)。

借用试除法分解质因数的思路,大于\(\sqrt N\)的质因子至多只有一个。那么,大于 \(\sqrt[3] N\) 的质因数的平方整除 \(N\) 的个数至多也只有一个,而且指数至多为 \(2\) ,因为指数再大或者再乘上一个等数量级的完全平方数都会超过 \(10^{18}\) 的数据范围。

然后就筛出 \(\sqrt[3] {10^{18}}=10^6\) 范围内的质数,然后将 \(N\) 中\([0,10^6]\) 范围内的质因子去掉。在这一过程中一旦出现指数大于 \(2\) 的情况就直接 \(GG\) 。然后剩下的如果是大于 \(1\) 的话就 \(check\) 一下是不是完全平方数就好了。

\(\\\)

\(Code\)


#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1000010
#define R register
#define gc getchar
using namespace std;
typedef long long ll; inline ll rd(){
ll x=0; bool f=0; char c=gc();
while(!isdigit(c)){if(c=='-')f=1;c=gc();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}
return f?-x:x;
} bool vis[N]; ll prm[N]; inline void init(){
for(R ll i=2;i<N;++i){
if(!vis[i]) prm[++prm[0]]=i;
for(R ll j=1,k;j<=prm[0]&&(k=i*prm[j])<N;++j){
vis[k]=1; if(i%prm[j]==0) break;
}
}
} inline bool check(ll x){
for(R ll i=1;i<=prm[0];++i)
if(x%prm[i]==0){
x/=prm[i];
if(x%prm[i]==0) return 0;
if(x==1) return 1;
}
ll tmp=(ll)sqrt((double)x);
return (tmp*tmp!=x);
} int main(){
init();
ll t=rd();
for(R ll i=1;i<=t;++i){
printf("Case %lld: ",i);
puts(check(rd())?"Yes":"No");
}
return 0;
}

[ HDOJ 3826 ] Squarefree number的更多相关文章

  1. HDU 3826 Squarefree number ( 唯一分解定理 )

    题目链接 题意 : 给出一个数.问其能不能被任何一个平方数整除.如果可以则输出 No 即不是 Square-free Number .否则输出 Yes 分析 : 首先 N 有 1e18 那么大.不能暴 ...

  2. 水题 HDOJ 4727 The Number Off of FFF

    题目传送门 /* 水题:判断前后的差值是否为1,b[i]记录差值,若没有找到,则是第一个出错 */ #include <cstdio> #include <iostream> ...

  3. 2018 南京预选赛 J Sum ( 欧拉素数筛 、Square-free Number、DP )

    题目链接 题意 : 定义不能被平方数整除的数为 Square-free Number 定义 F(i) = 有几对不同的 a 和 b 使得 i = a * b 且 a .b 都是 Square-free ...

  4. HDOJ 3709 Balanced Number

    数位DP... Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java ...

  5. 如何运用同余定理求余数【hdoj 1212 Big Number【大数求余数】】

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  6. HDOJ 1018 Big Number(大数位数公式)

    Problem Description In many applications very large integers numbers are required. Some of these app ...

  7. HDOJ 1266 Reverse Number(数字反向输出题)

    Problem Description Welcome to 2006'4 computer college programming contest! Specially, I give my bes ...

  8. HDOJ 4937 Lucky Number

    当进制转换后所剩下的为数较少时(2位.3位),相应的base都比較大.能够用数学的方法计算出来. 预处理掉转换后位数为3位后,base就小于n的3次方了,能够暴力计算. . .. Lucky Numb ...

  9. HDOJ 2665 Kth number

    静态区间第K小....划分树裸题 Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

随机推荐

  1. Spring boot精要

    1.自动配置:针对很多Spring应用程序的常见应用功能,SpringBoot能自动提供相关配置: 2.起步依赖:告诉SpringBoot需要什么功能,他就能引入需要的库: 3.命令行界面:这是Spr ...

  2. 2、Java并发性和多线程-多线程的优点

    以下内容转自http://ifeve.com/benefits/: 尽管面临很多挑战,多线程有一些优点使得它一直被使用.这些优点是: 资源利用率更好 程序设计在某些情况下更简单 程序响应更快 资源利用 ...

  3. 彻底来理解下hashmap吧

    1.什么叫hashmap? 答:首先是一种map集合,其次呢,它是一种利用hash表来存储的数据结构.所以叫hashmap. 2.hashmap的特点是什么? 答:hashmap的特点是key值不能重 ...

  4. c++学习 - int 和 string 的相互转换

    在C++中会碰到int和string类型转换的. string -> int 首先我们先看两个函数: atoi 这个函数是把char * 转换成int的.应该是属于标准库函数.在想把string ...

  5. 踩坑录-libreoffice fatal error com.sun.start.ucb.Interactive.AugmentedIOException: a folder could not be created

    错误概要: 1.LibreOffice可以正常使用: 2.启动tomcat报错如下: Fatal error The application cannot be started. ][context= ...

  6. Python进阶系列之怎么写出pythonic的代码

    使用 in/not in 检查key是否存在于字典中 判断某个key是否存在于字典中时,一般的初学者想到的方法是,先以列表的形式把字典所有的key返回,在判断该key是否存在于key列表中 d = { ...

  7. 004 ospf

    r0(config)#router ospf 1 OSPF process 1 cannot start. There must be at least one "up" IP i ...

  8. CentOS 5.5 介绍

    转载:http://www.osyunwei.com/archives/3625.html 操作系统:CentOS 5.5主机名称:wwwIP地址:192.168.21.128网关:192.168.2 ...

  9. Windows下安Mac

    Windows PC下安装苹果系统 第一步: 準備2個新邏輯分區,一個6G(os),一個隨意(Mac),且不要格式化. 第二步: 启动硬盘助手,选择下载好的苹果镜像文件  .再选择6G(os)分區,寫 ...

  10. [Sqlite3] Sqlite Introduction

    Check whether you have sqlite3 installed: sqlite3 -version To create a new db: sqlite3 <filename. ...