題目大意:
輸入n;
從1到n找一些數乘起來,使得答案是乙個完全平方數,並盡量使這個數大,答案模100000007;
樣例:
輸入 7
輸出 144
思路:
1.將所有合數分解為素數;
2.統計所有分解後 每個素數的個數;
3.個數為奇數 ,個數減一跑快速冪,偶數直接跑;
統計素數個數
n=8;1~8中
2的個數:
2:1個
4:2個
6:1個
8:3個
2的個數=8/2+8/4+8/8=7;
及n/2^1+n/2^2+……+n/2^k=num;
機智……
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const ll maxn=6000001,mod=100000007;
ll is_prime[maxn],cnt,n,num[maxn];
bool not_prime[maxn];
void euler()
}return;
}ll ksm(ll a,ll b)
return ans%mod;
}void solve()
}ll an=1;
for(ll i=1;i<=cnt;i++)
cout
病毒(唯一分解定理 尤拉篩)
chen 03 會製造電腦病毒。有人把 jay 的電腦植入了病毒,而要解除病毒,jay 要回答一道題。在電腦螢幕上有乙個數n jay 被要求輸入乙個正整數,這個數能被 1,n 內所有數整除,並且要保持這個數最小,因為這個數可能很大,所以只要輸出對109 7取模的結果就行了。然而 jay 成功的破解了...
素數篩 唯一分解定理 質因子分解 逆元 尤拉篩
素數篩 n,q 1e6 如果暴力求素數 根號n 1000 1e9超時 nlogn預處理素數 o 1 q include using namespace std typedef long long ll typedef pair pll define mp make pair define pb pu...
數論 唯一分解定理
模唯一分解 總結參考 定理設 a 和 b為整數,b 0 則存在整數 q 和 r,使得a qb r 0 r b 使 r 稱為b除 a 所得的最小剩餘 真確性無需證明,根據定理有如下定義 定義定理若集合 m 為整數的乙個子集,對加減運算封閉,則稱m為模,而任意乙個非零模,必為一正整數的諸倍數組成的集合....