JZOJ B組 幸運數

2021-08-28 09:19:10 字數 945 閱讀 1918

description

如果乙個正整數的所有質因子都小於等於m且每種質因子個數都為奇數,則稱這個數為幸運數,例如當m=3時,6是幸運數而5不是,12也不是幸運數(2這個質因子有偶數個)。

給定n,m,求小於等於n的幸運數有多少個。

input

一行2個數,表示n,m。

output

一行1個數,表示幸運數的個數。

sample input

10 3

sample output

5data constraint

對於20%的資料,n<=104,m<=104;

對於40%的資料,n<=107,m<=106;

對於80%的資料,n<=108,m<=106;

對於100%的資料,n<=109,m<=106。

思路首先,分解質因數,然後dfs列舉因子個數。結果tle20

所以考慮優化。

我們發現,當x*a[i]^2>m那麼可以二分找出那些質數合法

**

#include#include#define sqr(x) (x*x)

#define ll long long

using namespace std;

int n,m,g[1000010],f[1000010],cnt,ans;

void ef(int x,int t)

if (p!=-1) ans+=p-x+1;

ans++;

}void dfs(int x,int t)

if (t*(ll)g[x]*g[x]>n)

dfs(x+1,t);

ll k=g[x];

for (int i=1;i<=50;i++) }

int main()

} dfs(1,1);

printf("%d",ans);

}

尋找幸運數

4和7是幸運數字,由它們所組成的數也是幸運數字。例如 44,47,474,7447等等。這一系列幸運數由小到大構成了幸運數列。現在,需要設計乙個演算法找出第n個幸運數是多少。我們可以將幸運數列分組 4,7 44,47,74,77 444,447,474,477,744,747,774,777 可以看...

尋找幸運數

今天刷題時,遇到了一道題,我覺得還挺有意思的,自己實現了一下,看了下大佬們的答案,實現如下。首先先來看一下什麼是幸運數 我們一般用的數是十進位制,但是機器只識別二進位制,當乙個整數的十進位制數的每一位,加起來等於它的二進位制的每一位加起來的和。舉個例子吧,123的二進位制表示為1111011,所以二...

京東 幸運數

小明同學學習了不同的進製之後,拿起了一些數字做起了遊戲。小明同學知道,在日常生活中我們最常用的是十進位制數,而在計算機中,二進位制數也很常用。現在對於乙個數字x,小明同學定義出了兩個函式f x 和g x f x 表示把x這個數用十進位制寫出後各個數字上的數字之和。如f 123 1 2 3 6。g x...