首页后端开发其他后端知识c语言中求欧拉函数的值 欧拉公式的c语言实现

c语言中求欧拉函数的值 欧拉公式的c语言实现

时间2023-04-04 22:52:01发布访客分类其他后端知识浏览646
导读:C语言算一个数欧拉函数,输入0结束 unsigned int ss(unsigned int a { unsigned int i; for(i=2;i*i=a;i++ { if(a%i==0 break; ...

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语言求解欧拉函数和本原根

#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语言中这么求欧拉函数的值有什么问题吗,题目如下。

#includestdio.h

int main() {

    int sum,x,i,a;

    while(scanf("%d", x)!=EOF) {

        a=x;

        sum=a-1;

        while (x2){

            x--;

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

                if (a%i == 0  x%i == 0) {

                    sum--;

                    break;

                }

            }         

        }

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

    }

    return 0;

}

没问题,结果是对的。

其中注意,1是和大于1的每个数互质的。你将sum置为a-1,然后i从2开始计算,刚好把1默认算进去了。因此结果是正确的。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: c语言中求欧拉函数的值 欧拉公式的c语言实现
本文地址: https://pptw.com/jishu/1337.html
最新c语言函数大全 最新c语言函数大全 c语言自定义函数开方 c语言自定义函数的使用方法

游客 回复需填写必要信息