您的位置:js12345金沙官网登入 > 网络编程 > 蓝杯二十六

蓝杯二十六

2019-10-02 10:01

算法提高 欧拉函数

/*算法训练 动态数组使用 

时间限制:1.0s 内存限制:512.0MB

时间限制:1.0s  内存限制:512.0MB

提交此题

提交此题   

说明

从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出。

2016.4.5 已更新试题,请重新提交自己的程序。

要求尽可能使用函数实现程序代码。平均值为小数的只保留其整数部分。

问题描述

样例输入:

给定一个大于1,不超过2000000的正整数n,输出欧拉函数,phi的值。

5

如果你并不了解欧拉函数,那么请参阅提示。

3 4 0 0 2

输入格式

样例输出:

在给定的输入文件中进行读入:

9  1

一行一个正整数n。

样例输入:

输出格式

7

将输出信息输出到指定的文件中:

3 2 7 5 2 9 1

一行一个整数表示phi。

样例输出:

样例输入

29  4

17

*/

样例输出

#include "stdio.h"

16

int main(){

提示

js12345金沙官网登入,    int n,m,sum=0,i,ave;

欧拉函数phi是数论中非常重要的一个函数,其表示1到n-1之间,与n互质的数的个数。显然的,我们可以通过定义直接计算phi。

    scanf("%d",&n);

当然,phi还有这么一种计算方法。

    for(i=0;i < n;i++){

首先我们对n进行质因数分解,不妨设n=p1^a1 * p2^a2 * ... * pk^ak (这里a^b表示a的b次幂,p1到pk为k个互不相同的质数,a1到ak均为正整数),那么

        scanf("%d",&m);

phi=n....

        sum+=m;

稍稍化简一下就是

    }

phi=n.../(p1*p2*...*pk)

    ave=sum/n;

计算的时候小心中间计算结果超过int类型上界,可通过调整公式各项的计算顺序避免!

    printf("%d %dn",sum,ave);

#include<cstdio>

    return 0;

int euler{ //返回euler

}

int res=n,a=n;

二、/* 算法训练 最大最小公倍数 

for(int i=2;i*i<=a;i++){//从小到大尝试n的质因数

时间限制:1.0s  内存限制:256.0MB

if{//如果i是n的质因数

提交此题  锦囊1  锦囊2

res=res/i*;//提了一个1/i出来,先进行除法是为了防止中间数据的溢出

问题描述

while a/=i;//欧拉函数只记算一种质因数

已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

}

输入格式

}

输入一个正整数N。

if res=res/a*;//如果最后还剩因子

输出格式

return res;

输出一个整数,表示你找到的最小公倍数。

}

样例输入

int main(){

9

int x;

样例输出

scanf("%d",&x);

504

printf("%d",euler;

数据规模与约定

return 0;

1 <= N <= 10^6。

}

*/

思路分析:

#include<iostream> 

①定义变量:一个整数;

using namespace std; 

②输入一个整数;

int main() 

③调用函数:

定义变量;

    long long n,ans; 

for语句从小到大尝试n的质因数 ;

    cin>>n; 

if语句判断i是否是n的质因数,如果是,则 提了一个1/i出来,先进行除法是为了防止中间数据的溢出 ;

    if(n<=2) 

while语句循环:欧拉函数只记算一种质因数 ;

    ans=n; 

if语句判断是否最后还剩因子 ;

    else if(n%2==1) 

返回值;

    ans=n*(n-1)*(n-2); 

④输出欧拉函数。

    else 

算法提高 前10名

    { 

时间限制:1.0s 内存限制:256.0MB

        if(n%3==0) 

提交此题

        ans=(n-1)*(n-2)*(n-3); 

问题描述

        else 

本文由js12345金沙官网登入发布于网络编程,转载请注明出处:蓝杯二十六

关键词: