51nod1441 士兵的數字遊戲 分解質因子

2021-07-09 13:47:43 字數 1715 閱讀 2811

題目大意:

兩個士兵正在玩乙個遊戲,遊戲開始的時候,第乙個士兵為第二個士兵選乙個正整數n。然後第二個士兵要玩盡可能多的輪數。每一輪要選擇乙個正整數x>1,且n要是x的倍數,然後用n/x去代替n。當n變成1的時候,遊戲就結束了,第二個士兵所得的分數就是他玩遊戲的輪數。

為了使遊戲更加有趣,第乙個士兵用 a! / b! 來表示n。k!表示把所有1到k的數字乘起來。

那麼第二個士兵所能得到的最大分數是多少呢?

input

單組測試資料。

第一行包含乙個整數t (1 ≤ t ≤ 1,000,000),表示士兵玩遊戲的次數。

接下來t行,每行包含兩個整數a,b (1 ≤ b ≤ a ≤ 5,000,000)。

output

對於每一組資料,輸出第二個士兵能拿到的最多分數。
input示例

2

3 16 3

output示例

2

5

思路 : 分解質因數

大牛**:

#include const int maxn = 5000000;

int tot, prime[maxn + 1], f[maxn + 1], t, a, b;

template inline bool scan_d(t &ret)

inline void out(long long x)

int main()

for(int j = 0, k = maxn / i; j < tot && prime[j] <= k; ++j)

f[i] += f[i - 1];

} //scanf("%d", &t);

scan_d(t);

while(t--)

return 0;

}

自己的:

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define maxn 5000001

#define mod 1000000007

#define mem(a , b) memset(a , b , sizeof(a))

#define ll long long

#define inf 1000000000

int a , b;

int pos;

bool prime[maxn];

int vis[maxn];

int res[maxn];

template inline bool scan_d(t &ret)

inline void out(long long x)

void init()

}pos = 0;

for(int i = 0 ; i < maxn ; i ++)

}int solve(int val)

}return res[val] + 1;

}void get()

for(int i = 1 ; i < maxn ; i ++) res[i] += res[i-1];

}int main()

return 0;

}

51nod 1441 士兵的數字遊戲 素數篩

兩個士兵正在玩乙個遊戲,遊戲開始的時候,第乙個士兵為第二個士兵選乙個正整數n。然後第二個士兵要玩盡可能多的輪數。每一輪要選擇乙個正整數x 1,且n要是x的倍數,然後用n x去代替n。當n變成1的時候,遊戲就結束了,第二個士兵所得的分數就是他玩遊戲的輪數。為了使遊戲更加有趣,第乙個士兵用 a b 來表...

1441 士兵的數字遊戲

1441 士兵的數字遊戲 基準時間限制 6 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 兩個士兵正在玩乙個遊戲,遊戲開始的時候,第乙個士兵為第二個士兵選乙個正整數n。然後第二個士兵要玩盡可能多的輪數。每一輪要選擇乙個正整數x 1,且n要是x的倍數,然後用n x去代替n。當n變成...

1441 士兵的數字遊戲

1441 士兵的數字遊戲 基準時間限制 6 秒 空間限制 131072 kb 分值 兩個士兵正在玩乙個遊戲,遊戲開始的時候,第乙個士兵為第二個士兵選乙個正整數n。然後第二個士兵要玩盡可能多的輪數。每一輪要選擇乙個正整數x 1,且n要是x的倍數,然後用n x去代替n。當n變成1的時候,遊戲就結束了,第...