problem description
f(n)=(∏i=1nin−i+1)%1000000007
you are expected to write a program to calculate f(n) when a certain n is given.
input
multi test cases (about 100000), every case contains an integer n in a single line.
output
for each n,output f(n) in a single line.
sample input 2
100
sample output 2
148277692
官方題解:
找規律f(1)=1
f(2)=1*1*2=(1)*(1*2)=1!*2!
f(3)=1*1*1*2*2*3=(1)*(1*2)*(1*2*3)=1!*2!*3!
式子可以簡化為 f(n)=∏i=1n(n!)%mod
,直接打表不行,會超記憶體,可以對資料進行離線處理。排好序之後從小到大暴力。clogc+10000000 ,c為case數目。
題目解析:以前根本不知道題目可以這麼做,又學了一樣新東西,離線處理。
#include #include#include
#include
#include
#include
#include
#include
const
int mod=1000000007
;using
namespace
std;
intn,tt;
struct
node
q[100010
];int cmp1(const
void *a,const
void *b)
int cmp2(const
void *a,const
void *b)
intmain()
qsort(q,tt,
sizeof(q[0
]),cmp1);
for(int i=0,j=2; i)
q[i].sum=s2;
}qsort(q,tt,
sizeof(q[0
]),cmp2);
for(int i=0; i)
printf(
"%d\n
",q[i].sum);
return0;
}
HDU 找新朋友
題目大概是小於n的數中有多少個與n互素的數。這裡可以用尤拉公式。函式的值 通式 x x 1 1 p1 1 1 p2 1 1 p3 1 1 p4 1 1 pn 其中p1,p2 pn為x的所有質因數,x是不為0的整數。1 1 唯一和1 互質的數 小於等於1 就是1本身 注意 每種質因數只乙個。比如12 ...
hdu 找新朋友
題目 problem description 新年快到了,豬頭幫協會 準備搞乙個聚會,已經知道現有會員n人,把會員從1到n編號,其中會長的號碼是n號,凡是和會長是老朋友的,那麼該會員的號碼肯定和n有大於1的公約數,否則都是新朋友,現在會長想知道究竟有幾個新朋友?請你程式設計序幫會長計算出來。inpu...
hdu 1286 找新朋友
problem description 新年快到了,豬頭幫協會 準備搞乙個聚會,已經知道現有會員n人,把會員從1到n編號,其中會長的號碼是n號,凡是和會長是老朋友的,那麼該會員的號碼肯定和n有大於1的公約數,否則都是新朋友,現在會長想知道究竟有幾個新朋友?請你程式設計序幫會長計算出來。input 第...