欧拉函数c语言实现 c++欧拉函数

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语言实现欧拉函数int eular(int n)
{
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 == 0n % j == 0) {
break;
}
}
if (ji) {
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; iy;i) {
printf("%d ", num[i]);
}
printf("\n%d", y);
return 0;
}
【欧拉函数c语言实现 c 欧拉函数】关于欧拉函数c语言实现和c欧拉函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读