资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

c语言实现欧拉函数,C语言欧拉函数

C语言实现欧拉函数

int eular(int n)

成都创新互联从2013年创立,是专业互联网技术服务公司,拥有项目成都做网站、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元浈江做网站,已为上家服务,为浈江各地企业和个人服务,联系电话:13518219792

{

int ret=1,i; //定义变量

for(i=2;i*i=n;i++) //从i=2开始循环,判定条件为i*i小于等于n,循环一次i增加1

if(n%i==0) //判定条件为n除以i的余数等于0

{

n/=i,ret*=i-1; //n=n/i,ret = ret*(i-1)

while(n%i==0) //当n除以i的余数等于0时执行下面的语句,否则跳过

n/=i,ret*=i;

}

if(n1) //如果n1执行下面语句,否则跳过

ret*=n-1; //ret = ret*(n-1)

return ret;

}

直接复制的百度百科的,没具体看是什么功能

C语言求解欧拉函数和本原根

#include stdio.h

int eulerFunc(int n, int* num_out) {

int i, j, cnt = 0;

num_out[cnt++] = 1;

for (i = 2; i = n; ++i) {

for (j = 2; j = i; ++j) {

if (i % j == 0  n % j == 0) {

break;

}

}

if (j  i) {

num_out[cnt++] = i;

}

}

return cnt;

}

int main(void) {

int n, num[10], y, i;

scanf("%d", n);

y = eulerFunc(n, num);

for (i = 0; i  y; ++i) {

printf("%d ", num[i]);

}

printf("\n%d", y);

return 0;

}

C语言算一个数欧拉函数,输入0结束

unsigned int ss(unsigned int a)

{

unsigned int i;

for(i=2;i*i=a;i++) {

if(a%i==0) break;

}

if(i*i=a) return 0;

else return 1;

}

这个判断素数的函数逻辑是:

i在2~根号a(a是外部传入的需要判断的正整数)之间循环递增1,

如果a能被i整除,则跳出循环,否则继续循环直至i大于根号a退出循环,

退出循环后,判断当前i值是否小于根号a,

小于等于根号a,则是中途退出,返回0(是合数);

大于根号a,则是循环条件完成退出,返回1(是质数)。

函数ss( a)在函数unsigned int oula(unsigned int n)中调用

unsigned int oula(unsigned int n)

{

unsigned int f=n,p;

for(p=2;p=n;p++)

if(ss(p)(n%p==0)) f=f*(1-(1/p));  调用处

return f;

}

输入100,000,000,要看编译器对unsigned int的定义,

如果编译器定义为2 byte,则范围是:0~2^16-1(62353),此时100,000,000会溢出。

如果编译器定义为4 byte,则范围是:0~4294967295,大于100,000,000.此时可以输入,但因数据太大,计算完成要超过2分钟(用去年主流配置的x86电脑测试),输入10,000,000就感觉明显的时延,要约20秒才能输出结果。

测试截图如下图:

另,函数unsigned int oula(unsigned int n)需要改成:

unsigned int oula(unsigned int n)

{

unsigned int f=n,p;

for(p=2;p=n;p++)

if(ss(p)(n%p==0))

//f=f*(1-(1/p));  //修改小数部分丢失问题

f=f*(p-1)/p;

return f;

}

供参考。


本文题目:c语言实现欧拉函数,C语言欧拉函数
本文路径:http://cdkjz.cn/article/dscjoie.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220