Euler函數(shù):
m = p1^r1 * p2^r2 * …… * pn^rn ai >= 1 , 1 <= i <= n
Euler函數(shù):
定義:phi(m) 表示小于等于m并且與m互質(zhì)的正整數(shù)的個(gè)數(shù)。
phi(m) = p1^(r1-1)*(p1-1) * p2^(r2-1)*(p2-1) * …… * pn^(rn-1)*(pn-1)
= m*(1 - 1/p1)*(1 - 1/p2)*……*(1 - 1/pn)
= p1^(r1-1)*p2^(r2-1)* …… * pn^(rn-1)*phi(p1*p2*……*pn)
定理:若(a , m) = 1 則有 a^phi(m) = 1 (mod m) 即a^phi(m) - 1 整出m
在實(shí)際代碼中可以用類似素?cái)?shù)篩法求出
for (i = 1 i < MAXN i++)
phi[i] = i
for (i = 2 i < MAXN i++)
if (phi[i] == i)
{
for (j = i j < MAXN j += i)
{
phi[j] /= i
phi[j] *= i - 1
}
}
容斥原理:定義phi(p) 為比p小的與p互素的數(shù)的個(gè)數(shù)
設(shè)n的素因子有p1, p2, p3, … pk
包含p1, p2…的個(gè)數(shù)為n/p1, n/p2…
包含p1*p2, p2*p3…的個(gè)數(shù)為n/(p1*p2)…
phi(n) = n - sigm_[i = 1](n/pi) + sigm_[i!=j](n/(pi*pj)) - …… +- n/(p1*p2……pk)
= n*(1 - 1/p1)*(1 - 1/p2)*……*(1 - 1/pk)
標(biāo)簽:
Euler
lt
phi
函數(shù)
上傳時(shí)間:
2014-01-10
上傳用戶:wkchong
#include<stdio.h>
void main(void)
{int n,k,derivata,a[10],i
printf("n=") scanf(" d",&n)
for(i=0 i<=n i++)
{ printf("a[ d]=",i) scanf(" d",&a[i])
}
printf("k=") scanf(" d",&k)
for(derivata=1 derivata<=k derivata++)
{
for(i=0 i<=n i++)
a[i]=a[i]*(n-i)
n--
for(i=0 i<=n i++)
printf(" d ",a[i])
printf("\n")
}}
標(biāo)簽:
void
derivata
include
printf
上傳時(shí)間:
2017-09-17
上傳用戶:duoshen1989
#include <stdlib.h>
#include<stdio.h>
#include <malloc.h>
#define stack_init_size 100
#define stackincrement 10
typedef struct sqstack
{
int *base;
int *top;
int stacksize;
} sqstack;
int StackInit(sqstack *s)
{
s->base=(int *)malloc(stack_init_size *sizeof(int));
if(!s->base)
return 0;
s->top=s->base;
s->stacksize=stack_init_size;
return 1;
}
int Push(sqstack *s,int e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(int *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(int)); if(!s->base)
return 0;
s->top=s->base+s->stacksize;
s->stacksize+=stackincrement;
}
*(s->top++)=e;
return e;
}
int Pop(sqstack *s,int e)
{
if(s->top==s->base)
return 0;
e=*--s->top;
return e;
}
int stackempty(sqstack *s)
{
if(s->top==s->base)
{
return 1;
}
else
{
return 0;
}
}
int conversion(sqstack *s)
{
int n,e=0,flag=0;
printf("輸入要轉(zhuǎn)化的十進(jìn)制數(shù):\n");
scanf("%d",&n);
printf("要轉(zhuǎn)化為多少進(jìn)制:\n"); scanf("%d",&flag);
printf("將十進(jìn)制數(shù)%d 轉(zhuǎn)化為%d 進(jìn)制是:\n",n,flag);
while(n)
{
Push(s,n%flag);
n=n/flag;
}
while(!stackempty(s))
{
e=Pop(s,e);
switch(e)
{
case 10: printf("A");
break;
case 11: printf("B");
break;
case 12: printf("C"); break;
case 13: printf("D"); break;
case 14: printf("E"); break;
case 15: printf("F"); break;
default: printf("%d",e); }
}
printf("\n");
return 0;
}
int main()
{
sqstack s;
StackInit(&s);
conversion(&s);
return 0;
}
標(biāo)簽:
整數(shù)
棧
基本操作
十進(jìn)制
轉(zhuǎn)化
進(jìn)制
上傳時(shí)間:
2016-12-08
上傳用戶:愛你198