Harmonic Number

In mathematics, the nth harmonic number is the sum of the reciprocals of the first n natural numbers:
在这里插入图片描述
在这里插入图片描述

In this problem, you are given n, you have to find Hn.

Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.

Each case starts with a line containing an integer n (1 ≤ n ≤ 108).

Output
For each case, print the case number and the nth harmonic number. Errors less than 10-8 will be ignored.

Sample Input
12

1

2

3

4

5

6

7

8

9

90000000

99999999

100000000

Sample Output
Case 1: 1

Case 2: 1.5

Case 3: 1.8333333333

Case 4: 2.0833333333

Case 5: 2.2833333333

Case 6: 2.450

Case 7: 2.5928571429

Case 8: 2.7178571429

Case 9: 2.8289682540

Case 10: 18.8925358988

Case 11: 18.9978964039

Case 12: 18.9978964139

在VJ上做的:
问题连接

问题描述

给出n,求Hn

问题分析

打表。直接打表会超内存,但可以每一百个记录一个值,以后查表的时候,再把要找的值算出来就可以避免这个问题了,而且计算量也不是很大,算是打表的技巧吧。

代码如下

#include<iostream>
#include<cstdio>
using namespace std;

const int N=1e6+5;
const int size=100;

double hn[N];

void gethn(){
	int i,j,k;
	double temp;
	hn[0]=0;
	temp=0;
	k=1;
	for(i=1;i<=N;i++){
		for(j=1;j<=size;j++){
		temp+=(1.0)/k;	
		k++;
		}
		hn[i]=temp;
	}
}

double readhn(int x){
	double ans;
	int c=x%size;
	ans=hn[x/size];
	for(int i=x-c+1;i<=x;i++) ans+=1.0/i;
	return ans;
}

int main(){
	gethn();
	int i,t,n; 
	scanf("%d",&t);
	for(i=1;i<=t;i++){
		scanf("%d",&n);
		printf("Case %d: %.10lf\n",i,readhn(n));
	}
	return 0;
}
Harmonic analysis is a mathematical tool used to analyze periodic functions by decomposing them into a sum of sinusoidal functions with different frequencies, amplitudes, and phases. In order to perform harmonic analysis using C programming language, the following steps can be followed: 1. Define the periodic function to be analyzed as a series of discrete values. This can be done by either inputting the values manually or by reading them from a file. 2. Calculate the discrete Fourier transform (DFT) of the input signal using the Fast Fourier Transform (FFT) algorithm. This can be implemented using the FFTW library or by writing your own FFT algorithm. 3. Extract the frequency spectrum of the input signal by calculating the magnitude and phase of each frequency component in the DFT output. 4. Use the frequency spectrum to analyze the harmonic content of the input signal by identifying the dominant frequencies and their corresponding amplitudes and phases. 5. Visualize the harmonic analysis results using plots and graphs to better understand the periodic nature of the input signal. Here is an example code snippet in C that performs harmonic analysis on a given periodic function using FFT: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> #include <fftw3.h> #define N 256 // number of discrete samples #define Fs 1000.0 // sampling frequency #define f1 50.0 // fundamental frequency #define f2 100.0 // second harmonic frequency int main() { double x[N], y[N], freq[N], mag[N], phase[N]; int i; // generate a test signal with two harmonics for (i = 0; i < N; i++) { x[i] = sin(2.0 * M_PI * f1 * i / Fs) + 0.5 * sin(2.0 * M_PI * f2 * i / Fs); } // perform FFT on the input signal fftw_complex *in, *out; fftw_plan p; in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); for (i = 0; i < N; i++) { in[i][0] = x[i]; in[i][1] = 0.0; } p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE); fftw_execute(p); // extract frequency spectrum from the FFT output for (i = 0; i < N; i++) { freq[i] = i * Fs / N; mag[i] = sqrt(out[i][0] * out[i][0] + out[i][1] * out[i][1]) / N; phase[i] = atan2(out[i][1], out[i][0]); } // print out the harmonic content of the input signal printf("Frequency\tMagnitude\tPhase\n"); for (i = 0; i < N/2; i++) { printf("%f\t%f\t%f\n", freq[i], mag[i], phase[i]); } // clean up resources fftw_destroy_plan(p); fftw_free(in); fftw_free(out); return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值