從1−n中找一些數乘起來使得答案是乙個完全平方數,求這個完全平方數最大可能是多少(答案取模100000007)
(資料說明:對於20%的資料,1≤n≤100.對於50%的資料.1≤n≤5000.對於70%的資料,1≤n≤10^5.對於100%的資料,1≤n≤5×10^6.)
首先考慮什麼是合法解——完全平方數,那麼對其進行質因數分解之後得到的每種質因數的個數應當是偶數個.那麼,只要保證選取的數質因數分解後每種個數為偶數個,就能滿足完全平方數要求.那麼問題就轉換到求解1~n的任意質因數個數(對於個數為偶數的質數直接取完,個數為奇數的質數去掉該質數本身即可),如何快速求1~n的某一質因數個數.首先可以考慮這樣乙個問題:如何統計1~n的所有因數個數,實際上可以發現1的因數個數=n/1,2的因數個數=n/2…那麼則有如下式子:
那麼這個問題就便於解決了,舉個例子,如求1~81的3的個數是多少,可以發現ans=81/3+27/3+9/3+3/3=40,那麼就可以得到如下式子(好吧,我不會推導式子(逃)):
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int mod=100000007;
const
int maxp=500000+10;
const
int maxn=5000000+10;
int pri[maxn],notpri[maxn],pcnt;
void init(int n)//篩素數
}int count(int p,int n)//計算每個素數出現次數
return ret;
}int pow_mod(int x,int y)//快速冪
return ans;
}int main()
printf("%d",ans);
return
0;}
jzoj4900 完全平方數 數論
選1到n的數中的若干個,組成乙個最大的完全平方數。首先我們把合數都先選上,因為我們可以通過選質數來使它變成完全平方數,分解質因數後看指數的奇偶性就可以了。include include define ll long long define fo i,j,k for int i j i k i def...
SSL 1162 完全平方數 數論
目錄 2 求出不小於 n n 的所有完全平方數,n 2000000000 role presentation style position relative n 2000000000 n 2000000000 自然,樸素的求法是直接一到n列舉,自然,這樣的時間複雜度是o n o n 肯定超時。用平方...
UESTC 1720 無平方因子數(數論,容斥)
by cxlove 題目 無平方因子數即對於任意乙個素數p,p 2都不會整除那個數,如 1 5 5 15 3 5 都是無平方因子數,而 20 2 2 5 不是。現在給定乙個 n 1 n 10 12 求區間 1,n 中無平方因子數的個數。水水一發 囧 打出素數表,然後找出區間內有多少個數是有平方因子的...