首页 > 其他分享 >幸运数

幸运数

时间:2022-11-22 19:35:43浏览次数:51  
标签:begin cnt end mid longint ans 幸运


幸运数(lucky)

【题目描述】

         如果一个正整数的所有质因子都小于等于m且每种质因子个数都为奇数,则称这个数为幸运数,例如当m=3时,6是幸运数而5不是,12也不是幸运数(2这个质因子有偶数个)。

给定n,m,求小于等于n的幸运数有多少个。

【输入格式】

         一行2个数,表示n,m。

【输出格式】

         一行1个数,表示幸运数的个数。

【样例输入】

10  3

【样例输出】

5

【样例解释】

分别是1,2,3,6,8

【数据范围与约定】

对于20%的数据,n<=10^4,m<=10^4;

对于40%的数据,n<=10^7,m<=10^5;

对于80%的数据,n<=10^8,m<=10^6;

对于100%的数据,n<=10^9,m<=10^6。

题解:这题也没有什么特别的方法,直接一个DFS进行暴力模拟就可以了。

Code:

var
i,j,k,n,m,x,y,ans,cnt:longint;
b:array[0..1000005] of boolean;
f:array[0..80005] of longint;
function ef(k,s:int64):longint;
var l,r,mid,ans:longint;
begin
l:=k;r:=cnt;ans:=-1;
while l<=r do
begin
mid:=(l+r) div 2;
if f[mid]*s<=n then
begin
ans:=mid;l:=mid+1;
end else r:=mid-1;
end;
exit(ans);
end;
procedure dfs(k,s:int64);
var t,p:int64;i:longint;
begin
if k>cnt then
begin
inc(ans);
exit;
end;
if s*f[k]*f[k]>n then
begin
t:=ef(k,s);
if t<>-1 then ans:=ans+t-k+1;
inc(ans);
exit;
end;
dfs(k+1,s);
p:=f[k];
for i:=1 to 50 do
begin
if p*s<=n then dfs(k+1,p*s) else break;
p:=p*f[k]*f[k];
end;
end;
begin
assign(input,'lucky.in');reset(input);
assign(output,'lucky.out');rewrite(output);
readln(n,m);
fillchar(b,sizeof(b),true);
b[1]:=false;
for i:=2 to m div 2 do
if b[i] then
for j:=2 to m div i do b[i*j]:=false;
for i:=1 to m do
if b[i] then
begin
inc(cnt);
f[cnt]:=i;
end;
dfs(1,1);
writeln(ans);
close(input);close(output);
end.

 

标签:begin,cnt,end,mid,longint,ans,幸运
From: https://blog.51cto.com/u_15888102/5878378

相关文章

  • 幸运抽奖(面向对象)
    User:packagecom.javasm.bean;/***@Author:Zxb*@Version:1.0*@Date:2022/11/17-16:36*@Since:jdk1.8*@Description:*/publicclassUser{publici......
  • 幸运抽奖
    importjava.util.Arrays;importjava.util.Scanner;publicclassLuckyDraw{//扫描仪staticScannerscanner=newScanner(System.in);//注册的......
  • 幸运字符串(ansistring)
    幸运字符串(string)【问题描述】对于一个只包含0和1的字符串,如果A是幸运的,B也是幸运的,那么1AB1也是一个幸运的串。现在定义”0”是一个幸运字符串,请判断给定的字符串S是否是......
  • 幸运抽奖
    publicstaticStringanswer;publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);booleanloginFlag=false;......
  • java----小案例,幸运会员,打印正三角
    案例一1.接收一个4位数会员号2.生成随机数并乘以103.算出会员号中的百位数字的数字号与生成的随机数比较4.如果相等则是幸运会员,反之不是packagelearnday5;​import......
  • java----模拟幸运抽奖小案例
    模拟幸运抽奖案例:功能:用户注册:注册后随机生成4位数的卡号登录:三次机会,失败一次扣一次机会,机会为0返回主操作幸运抽奖:注册后生成的4位数卡号与随机生成的5个4位数卡号对......
  • 幸运大抽奖
    幸运大抽奖#include<stdio.h>#include<time.h>#include<stdlib.h>#include<windows.h>intmain(){srand((unsignedint)time(NULL));//把时间作为我们的随机数......
  • 幸运的袋子 附加动图演示!
    幸运的袋子_牛客题霸_牛客网(nowcoder.com)厄运的袋子 用到了深度遍历 递归回溯法这里假设一个例子: 1112234578因为要确认是否辛运,并且保持这次不幸运,......
  • 幸运的人一生都被童年治愈;不幸的人一生都在治愈童年。
    久留木玲|生活总是如此艰辛吗,还是只有童年才如此 阿尔弗雷德说“幸运的人一生都被童年治愈;不幸的人一生都在治愈童年。” PsychologistAlfredAdlersaid,Unfortuna......
  • 天威视讯很幸运吃了一个涨停,躲过了天地板!
    讲一下最近买的几只票:天威视讯、盈方微、熊猫乳品、依米康、酒鬼酒天威视讯盈亏如下:买入逻辑:前几天有过涨停板,回调几天,资金流出(绿柱)比较少,所以第二天挂了比开盘价......