博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3826 Squarefree number
阅读量:7106 次
发布时间:2019-06-28

本文共 1621 字,大约阅读时间需要 5 分钟。

要判断给定的n(2<=n<=10^18)是不是squarefree number;

因为给定的数最大达到10^18,所以直接暴力肯定是杯具的TLE;

我们知道  N必为 3种之一: 素数,素数的平方,两个不同素数之积。

10^18=10^6^3;那么我们求质数就只要求到10^6就可以,因为大于10^6就只能是平方次方,不可能是立方,因此可以用开方来判断;

假如我们求质数小于10^6,那么可能这个数是一个数的立方,或者是一个质数的平方乘以一个数,但不能开方,但又不能被前面的质数相除,因此会造成不是squarefree number的假象。

实现思路:

1. 计算1000000以下 素数,存于 num[ ]

2. 计算N的 小于1000000的因子p,如果有平方因子,则No,转 5

    否则 N=N/p
3.  消除N的小于 1000000的因子p后,判断是否还可以开方;

#include
#include
#include
int hash[500024]={
0}; int prime( int num[] ) {
for( int i=3;i<=1000;i+=2 ) {
if( hash[i/2] ) continue; int x=i<<1; for( int j=i*i; j<=1000000; j+=x ) hash[j/2]=1; } int count=0; num[++count]=2; for( int i=1;i<=500000;i++ ) {
if( hash[i]==0 ) num[++count]=( i<<1 )+1; } return count; } bool judge( int num[], int count , long long number ) {
long long t=( long long )sqrt( number ) ; for( int i=1;i<=count; i++ ) {
if( number==1 ) break; if( 0==(number%num[i]) ) {
number/=num[i]; if( number%num[i]==0 ) return true; } } if( number!=1 ) {
t=( long long )sqrt( number ) ; if( (t*t)==number ) return true; } return false; } int main( ) {
int T,num[78550]; int count = prime( num ); scanf( "%d",&T ); for( int i=1;i<=T; i++ ) {
long long number; scanf( "%I64d",&number ); printf( "Case %d: ",i ); bool t=judge( num,count,number ); printf( t?"No\n":"Yes\n" ); } return 0; }

  

转载于:https://www.cnblogs.com/bo-tao/archive/2011/08/27/2155597.html

你可能感兴趣的文章
Nginx 日志处理、awstats分析(学习笔记十三)
查看>>
Python3基础语法你学会了么
查看>>
第一篇博客
查看>>
玩转K8S之如何访问业务应用(Traefik-ingress篇)
查看>>
装修红宝书
查看>>
实时同步数据-数据库实时同步软件-mysql实时同步SyncNavigator
查看>>
swiper 划不动问题
查看>>
Inferno 7.1.12 发布,类 React 的高性能用户界面库
查看>>
MP实战系列(十二)之封装方法详解(续二)
查看>>
mysql必知必会2
查看>>
“想学吗”个人知识管理工具 6.0.5 发布,支持更多平台
查看>>
nginx作为web服务器一个重要的功能就是反向代理
查看>>
ECShop出现Strict Standards: Only variables should be passed by reference in的解决方法
查看>>
一统江湖的大前端(2)—— Mock.js + Node.js 如何与后端潇洒分手
查看>>
不知不觉的就莫名其妙的感觉有一点迷茫了
查看>>
两张图让git新手在项目中运用git命令行
查看>>
zkCli.sh对节点的增删改查
查看>>
初级排序算法1-定义排序规则
查看>>
vs2008打包过程图解
查看>>
彩铅练习,卡通女孩儿
查看>>